pax_global_header00006660000000000000000000000064144632105510014513gustar00rootroot0000000000000052 comment=ca4fff75f79767c9d3d2588d6f2f89ba2d0f560b quota-4.09/000077500000000000000000000000001446321055100126005ustar00rootroot00000000000000quota-4.09/ABOUT-NLS000066400000000000000000001131131446321055100140270ustar00rootroot00000000000000Notes 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 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 at translations should 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. 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'. 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 GNU `gettext' own 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 be not what is 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 have usually 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. 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 country 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'. 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. 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. Available Packages ================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of May 2003. 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 am az be bg ca cs da de el en en_GB eo es +-------------------------------------------+ a2ps | [] [] [] [] | aegis | () | anubis | | ap-utils | | bash | [] [] [] | batchelor | | bfd | [] [] | binutils | [] [] | bison | [] [] [] | bluez-pin | [] [] | clisp | | clisp | [] [] [] | coreutils | [] [] [] [] | cpio | [] [] [] | darkstat | () [] | diffutils | [] [] [] [] [] [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | error | [] [] [] [] [] | fetchmail | [] () [] [] [] [] | fileutils | [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] [] | gas | [] | gawk | [] [] [] [] | gcal | [] | gcc | [] [] | gettext | [] [] [] [] [] | gettext-runtime | [] [] [] [] [] | gettext-tools | [] [] | gimp-print | [] [] [] [] [] | gliv | | glunarclock | [] [] [] | gnucash | () [] | gnucash-glossary | [] () [] | gnupg | [] () [] [] [] [] | gpe-calendar | [] | gpe-conf | [] | gpe-contacts | [] | gpe-edit | | gpe-login | [] | gpe-ownerinfo | [] | gpe-sketchbook | [] | gpe-timesheet | | gpe-today | [] | gpe-todo | [] | gphoto2 | [] [] [] [] | gprof | [] [] | gpsdrive | () () () | grep | [] [] [] [] [] | gretl | [] | hello | [] [] [] [] [] [] | id-utils | [] [] | indent | [] [] [] [] | jpilot | [] [] [] [] | jwhois | [] | kbd | [] [] [] [] [] | ld | [] [] | libc | [] [] [] [] [] [] | libgpewidget | [] | libiconv | [] [] [] [] [] | lifelines | [] () | lilypond | [] | lingoteach | | lingoteach_lessons | () () | lynx | [] [] [] [] | m4 | [] [] [] [] | mailutils | [] [] | make | [] [] [] | man-db | [] () [] [] () | mysecretdiary | [] [] [] | nano | [] () [] [] [] | nano_1_0 | [] () [] [] [] | opcodes | [] [] | parted | [] [] [] [] [] | ptx | [] [] [] [] [] | python | | radius | | recode | [] [] [] [] [] [] | screem | | sed | [] [] [] [] [] | sh-utils | [] [] [] | sharutils | [] [] [] [] [] [] | sketch | [] () [] | soundtracker | [] [] [] | sp | [] | tar | [] [] [] [] | texinfo | [] [] [] [] | textutils | [] [] [] [] | tin | () () | util-linux | [] [] [] [] [] | vorbis-tools | [] [] [] | wastesedge | () | wdiff | [] [] [] [] | wget | [] [] [] [] [] [] [] | xchat | [] [] [] | xpad | | +-------------------------------------------+ am az be bg ca cs da de el en en_GB eo es 0 1 4 2 31 17 54 60 14 1 4 12 56 et fa fi fr ga gl he hr hu id it ja ko +----------------------------------------+ a2ps | [] [] [] () () | aegis | | anubis | [] | ap-utils | [] | bash | [] [] | batchelor | [] | bfd | [] [] | binutils | [] [] | bison | [] [] [] [] | bluez-pin | [] [] [] [] | clisp | | clisp | [] | coreutils | [] [] [] [] | cpio | [] [] [] [] | darkstat | () [] [] [] | diffutils | [] [] [] [] [] [] [] | e2fsprogs | | enscript | [] [] | error | [] [] [] [] | fetchmail | [] | fileutils | [] [] [] [] [] | findutils | [] [] [] [] [] [] [] [] [] [] [] | flex | [] [] | gas | [] | gawk | [] [] | gcal | [] | gcc | [] | gettext | [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] | gimp-print | [] [] | gliv | () | glunarclock | [] [] [] [] | gnucash | [] | gnucash-glossary | [] | gnupg | [] [] [] [] [] [] [] | gpe-calendar | [] | gpe-conf | | gpe-contacts | [] | gpe-edit | [] [] | gpe-login | [] | gpe-ownerinfo | [] [] [] | gpe-sketchbook | [] | gpe-timesheet | [] [] [] | gpe-today | [] [] | gpe-todo | [] [] | gphoto2 | [] [] [] | gprof | [] [] | gpsdrive | () [] () () | grep | [] [] [] [] [] [] [] [] [] [] [] | gretl | [] | hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | id-utils | [] [] [] | indent | [] [] [] [] [] [] [] [] | jpilot | [] () | jwhois | [] [] [] [] | kbd | [] | ld | [] | libc | [] [] [] [] [] [] | libgpewidget | [] [] [] | libiconv | [] [] [] [] [] [] [] [] | lifelines | () | lilypond | [] | lingoteach | [] [] | lingoteach_lessons | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailutils | | make | [] [] [] [] [] [] | man-db | [] () () | mysecretdiary | [] [] | nano | [] [] [] [] | nano_1_0 | [] [] [] [] | opcodes | [] [] | parted | [] [] [] | ptx | [] [] [] [] [] [] [] | python | | radius | | recode | [] [] [] [] [] [] | screem | | sed | [] [] [] [] [] [] [] [] | sh-utils | [] [] [] [] [] [] | sharutils | [] [] [] [] [] | sketch | [] | soundtracker | [] [] [] | sp | [] () | tar | [] [] [] [] [] [] [] [] [] | texinfo | [] [] [] [] | textutils | [] [] [] [] [] | tin | [] () | util-linux | [] [] [] [] () [] | vorbis-tools | [] | wastesedge | () | wdiff | [] [] [] [] [] | wget | [] [] [] [] [] [] [] [] | xchat | [] [] [] | xpad | | +----------------------------------------+ et fa fi fr ga gl he hr hu id it ja ko 20 1 15 73 14 24 8 10 30 31 19 31 9 lg lt lv ms nb nl nn no pl pt pt_BR ro +----------------------------------------+ a2ps | [] [] () () () [] [] | aegis | () | anubis | [] [] | ap-utils | () | bash | [] | batchelor | | bfd | | binutils | | bison | [] [] [] [] | bluez-pin | [] | clisp | | clisp | [] | coreutils | [] | cpio | [] [] [] | darkstat | [] [] [] [] | diffutils | [] [] [] | e2fsprogs | | enscript | [] [] | error | [] [] | fetchmail | () () | fileutils | [] | findutils | [] [] [] [] | flex | [] | gas | | gawk | [] | gcal | | gcc | | gettext | [] | gettext-runtime | [] | gettext-tools | | gimp-print | [] | gliv | [] | glunarclock | [] | gnucash | | gnucash-glossary | [] [] | gnupg | | gpe-calendar | [] [] | gpe-conf | [] [] | gpe-contacts | [] | gpe-edit | [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] | gpe-sketchbook | [] [] | gpe-timesheet | [] [] | gpe-today | [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | () () () | grep | [] [] [] [] | gretl | | hello | [] [] [] [] [] [] [] [] [] | id-utils | [] [] [] | indent | [] [] [] | jpilot | () () | jwhois | [] [] [] | kbd | | ld | | libc | [] [] [] [] | libgpewidget | [] [] | libiconv | [] [] | lifelines | | lilypond | [] | lingoteach | | lingoteach_lessons | | lynx | [] [] | m4 | [] [] [] [] | mailutils | | make | [] [] | man-db | [] | mysecretdiary | [] | nano | [] [] [] [] | nano_1_0 | [] [] [] [] | opcodes | [] [] [] | parted | [] [] [] | ptx | [] [] [] [] [] [] [] | python | | radius | | recode | [] [] [] | screem | | sed | [] [] | sh-utils | [] | sharutils | [] | sketch | [] | soundtracker | | sp | | tar | [] [] [] [] [] [] | texinfo | [] | textutils | [] | tin | | util-linux | [] [] | vorbis-tools | [] [] | wastesedge | | wdiff | [] [] [] [] | wget | [] [] [] | xchat | [] [] | xpad | [] | +----------------------------------------+ lg lt lv ms nb nl nn no pl pt pt_BR ro 0 0 2 11 7 26 3 4 18 15 34 34 ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW +-------------------------------------------+ a2ps | [] [] [] [] [] | 16 aegis | () | 0 anubis | [] [] | 5 ap-utils | () | 1 bash | [] | 7 batchelor | | 1 bfd | [] [] [] | 7 binutils | [] [] [] | 7 bison | [] [] | 13 bluez-pin | | 7 clisp | | 0 clisp | | 5 coreutils | [] [] [] [] [] | 14 cpio | [] [] [] | 13 darkstat | [] () () | 9 diffutils | [] [] [] [] | 21 e2fsprogs | [] | 3 enscript | [] [] [] | 11 error | [] [] [] | 14 fetchmail | [] | 7 fileutils | [] [] [] [] [] [] | 15 findutils | [] [] [] [] [] [] | 27 flex | [] [] [] | 10 gas | [] | 3 gawk | [] [] | 9 gcal | [] [] | 4 gcc | [] | 4 gettext | [] [] [] [] [] [] | 15 gettext-runtime | [] [] [] [] [] [] | 16 gettext-tools | [] [] | 5 gimp-print | [] [] | 10 gliv | | 1 glunarclock | [] [] [] | 11 gnucash | [] [] | 4 gnucash-glossary | [] [] [] | 8 gnupg | [] [] [] [] | 16 gpe-calendar | [] | 5 gpe-conf | | 3 gpe-contacts | [] | 4 gpe-edit | [] | 5 gpe-login | [] | 5 gpe-ownerinfo | [] | 7 gpe-sketchbook | [] | 5 gpe-timesheet | [] | 6 gpe-today | [] | 6 gpe-todo | [] | 6 gphoto2 | [] [] | 9 gprof | [] [] | 7 gpsdrive | [] [] | 3 grep | [] [] [] [] | 24 gretl | | 2 hello | [] [] [] [] [] | 33 id-utils | [] [] [] | 11 indent | [] [] [] [] | 19 jpilot | [] [] [] [] [] | 10 jwhois | () () [] [] | 10 kbd | [] [] | 8 ld | [] [] | 5 libc | [] [] [] [] | 20 libgpewidget | | 6 libiconv | [] [] [] [] [] [] | 21 lifelines | [] | 2 lilypond | [] | 4 lingoteach | | 2 lingoteach_lessons | () | 0 lynx | [] [] [] [] | 14 m4 | [] [] [] | 15 mailutils | | 2 make | [] [] [] [] | 15 man-db | [] | 6 mysecretdiary | [] [] | 8 nano | [] [] [] | 15 nano_1_0 | [] [] [] | 15 opcodes | [] [] | 9 parted | [] [] | 13 ptx | [] [] [] | 22 python | | 0 radius | | 0 recode | [] [] [] [] | 19 screem | [] | 1 sed | [] [] [] [] [] | 20 sh-utils | [] [] [] | 13 sharutils | [] [] [] [] | 16 sketch | [] | 5 soundtracker | [] | 7 sp | [] | 3 tar | [] [] [] [] [] | 24 texinfo | [] [] [] [] | 13 textutils | [] [] [] [] [] | 15 tin | | 1 util-linux | [] [] | 14 vorbis-tools | [] | 7 wastesedge | | 0 wdiff | [] [] [] [] | 17 wget | [] [] [] [] [] [] [] | 25 xchat | [] [] [] | 11 xpad | | 1 +-------------------------------------------+ 50 teams ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW 97 domains 32 19 16 0 56 0 48 10 1 1 12 23 913 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 May 2003 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'. 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. quota-4.09/COPYING000066400000000000000000000360271446321055100136430ustar00rootroot00000000000000This package, the quota tools, are made available under the GNU Public License version 2. ----------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS quota-4.09/Changelog000066400000000000000000001573001446321055100144200ustar00rootroot00000000000000Changes in quota-tools from 4.08 to 4.09 * Avoid including manpages multiple times in man_MANS (Jan Kara) Changes in quota-tools from 4.07 to 4.08 * Include unconfigured manpages into distribution (Jan Kara) Changes in quota-tools from 4.06 to 4.07 * Fix strncpy() usage in mount option parsing (Dmitry V. Levin) * Fix strncat() usage in /proc path construction (Dmitry V. Levin) * Warn about usage of old quota files on ext4 filesystems (Jan Kara) * Fix initialization of sa_mask in quota_nld (Petr Písař) * Don't use __P() in quotactl declaration (2xsaiko) * Warn if kernel returns 64-bit time and we have 32-bit time_t (Dmitry V. Levin) * Remove unused label (Dmitry V. Levin) * Remove dead code from quotacheck (Petr Písař) * Use realloc() instead of reallocarray() (Fabrice Fontaine) Changes in quota-tools from 4.05 to 4.06 * Remove quot tool (Jan Kara) * quotacheck,quotaon: Suggest using quota feature for ext4 (Jan Kara) * quota: Add --filesystem option (Jan Kara) * quota: Add synopsis for project quota (Jan Kara) * Handle grace time overflows for XFS quotas (Jan Kara) * Support grace period expirations past y2038 for XFS (Darrick J. Wong) * Fix limits setting on XFS filesystem (Jan Kara) * quota-tools: Set FS_DQ_TIMER_MASK for individual xfs grace times (Eric Sandeen) * quota-tools: pass quota type to QCMD for Q_XFS_GETQSTAT (Eric Sandeen) * Fix ignoring disabled quotas (Petr Písař) * warnquota: Initialize all members of a configparams structure (Petr Písař) * warnquota: Free LDAP error message (Petr Písař) * Make a directory for quota_nld PID file configurable (Petr Písař) * warnquota: Clarify that CC_TO gets resolved through LDAP (Jan Kara) * warnquota: Print also additional error info for LDAP errors (Jan Kara) * warnquota: Properly detect LDAP errors (Jan Kara) * warnquota: Do not ignore errors in config file (Jan Kara) * warnquota: Fix help text (Jan Kara) * quotacheck: Skip checking of filesystems with hidded quota files early (Jan Kara) * quotaops: Make error string translatable (Jan Kara) * rpc: Clarify error message when cannot connect to rpc.rquotad (Jan Kara) * setquota: Report failure to obtain quota information (Jan Kara) * quotaops: Do not leak dquot structures on failure (Jan Kara) * quotaops: Do not return partial list from getprivs() (Jan Kara) * Make messages about failures for NFS consistent with local filesystems (Jan Kara) * Delete old documentation (Jan Kara) * COPYING: Update mailing address (Jan Kara) * edquota: Remove forgotten license header (Jan Kara) * configure.ac: add --disable-pie option (Fabrice Fontaine) * warnquota: Improve examples in warnquota.conf (Jan Kara) * Avoid tampering with user CFLAGS (Dmitry V. Levin) * Revert "configure.ac: fix pkg_check_modules calls" (Dmitry V. Levin) * Makefile.am: link with INTLLIBS (Fabrice Fontaine) Changes in quota-tools from 4.04 to 4.05 * Use getrpcbynumber() instead of getrpcbynumber_r() (Jan Kara) * configure.ac: fix pkg_check_modules calls (Fabrice Fontaine) * Include to get loff_t definition (Fabrice Fontaine) * Add missing include (Fabrice Fontaine) * Use proper C99 integer types (Fabrice Fontaine) * Disable quot tool (Jan Kara) * Remove old disclaimers (Jan Kara) * rpc.rquotad: Handle daemon(3) failure (Jan Kara) * quota_nld: Check daemon() for failures (Petr Písař) * xqmstats: Fix a file descriptor leak in main() (Petr Písař) * quotackeck: Fix a directory descriptor leak in scan_dir() (Petr Písař) * convertquota: Fix a file descriptor leak in convert_endian() (Petr Písař) * quota(1): Distinguish between none quota limits and no allocated resources (Petr Písař) * Merge warnquota CC handling fix. (Jan Kara) * Fix warnquota Cc field being set incorrectly when using LDAP (Santiago Castro) * Track COPYING file in git. (Jan Kara) * Add quota_nld to .gitignore (Jan Kara) * rpc: Fix wrong limit for space usage (Jan Kara) * Listen on a TCP socket (Steve Dickson) * Add HPE XFS support (Tinguely, Mark) * warnquota: Fix comparing user name to non-null-terminated utmp.ut_user (Petr Písař) * warnquota: Check snprintf() for overflows (Petr Písař) * Add $(TIRPC_CFLAGS) globally to CFLAGS for RPC support, needed for libc 2.26 (Andreas K. Hüttel) * Install rquota(3) only if RPC is enabled (Petr Písař) * quotacheck: Fail check if quota file magic is invalid (Jan Kara) * quotacheck: Report error when caching of quota file fails (Jan Kara) * quotacheck: Avoid question in non-interactive mode (Jan Kara) * repquota: Fix output when user -2 exists (Jan Kara) * Implement manual choice of output unit (Jan Kara) * f2fs: support f2fs's quota sysfile (Jaegeuk Kim) Changes in quota-tools from 4.03 to 4.04 * Use TI-RPC for RPC client communication (Jan Kara) * rpc.rquotad: IPv6 support (Jan Kara) * rpc: Factor out getting of port number (Jan Kara) * Add support for ipv6 to good_client (Jan Kara) * quotacheck: Deallocate memory after direct scanning (Petr Písař) * quota: Return non-zero exit code when getting quota fails (Ian Chard) * quotaops: check return code of ftruncate and lseek calls (Dmitry V. Levin) * Use configure macros instead of hardcoded defaults (Dmitry V. Levin) * quotaops: check return code of fgets calls (Dmitry V. Levin) * quotaops: check setgid/setuid return code (Dmitry V. Levin) * quotacheck: fix ask_yn UB when fgets returns NULL (Dmitry V. Levin) * quotacheck: change to the directory before opening it, not after (Dmitry V. Levin) * Do not install quota_nld.8 when quota_nld is not installed (Dmitry V. Levin) * quota-tools: add missing newline to die() messages (Theodore Ts'o) * quotacheck: Use direct scanning also for ext4 (Jan Kara) * Improve detection of XFS quota interface (Jan Kara) * quotaon: Improve reporting of quota state (Jan Kara) * quota: fix coredump if projid file does not exist (Wang Shilong) * quotacheck: Fix buggy error check of read(2) (Jan Kara) * repquota: use the same whitespace for quotaio_meta as quotaio_v2 (Theodore Ts'o) * repquota: Add project quota support (Jan Kara) * edquota: Project quota support (Jan Kara) * setquota: Project quota support (Jan Kara) * quota: Add project quota support (Jan Kara) * quotasync: Add project quota support (Jan Kara) * quotaon: Add project quota support (Jan Kara) * Add support for project quota into generic code (Jan Kara) * Fix warnings due to missing stdlib.h (Jan Kara) * Support systems which do not have nl_langinfo() (Theodore Ts'o) * Provide fallback definitions for MNTTYPE_NFS and MNTTYPE_NOAUTO (Theodore Ts'o) * Use NGROUPS_MAX instead of NGROUPS (Theodore Ts'o) * Allow building on systems that do not have rpc header files (Theodore Ts'o) * Update the gitignore file to ignore additional generated files (Theodore Ts'o) * Don't build rpc.rquotad when --disable-rpc was requested. (Lars Wendler) * Add support for scanning using Q_XGETNEXTQUOTA (Jan Kara) * Scan dquots using Q_GETNEXTQUOTA (Jan Kara) * Don't link all binaries with ldap library (Jan Kara) * repquota: -F option takes an arg (Eric Sandeen) * Set -fPIC and -pie as default params when building (Tomáš Chvátal) * Do not accidentaly override commandline passed CFLAGS. (Tomáš Chvátal) * Respect the docdir declaration and do not override. (Tomáš Chvátal) * Print explicitely disabled options properly (Jan Kara) * Distribute ldap-scripts directory too (Tomáš Chvátal) * Fix build with disabled ldap (Jan Kara) * Fix whitespace in configure.ac (Tomáš Chvátal) Changes in quota-tools from 4.02 to 4.03 * Revive Changelog (Jan Kara) * Update release script to work with new build system (Jan Kara) * Make new build system use original versioning scheme (Jan Kara) * Automatic update of translation files (Jan Kara) * warnquota: Added StartTLS support (Ian Allison) * quota_nld: multicast project quota warnings via dbus (Masatake YAMATO) * Fix building of rquota.[ch] files (Jan Kara) * edquota: fix mtime check (Konstantin Khlebnikov) * Makefile.am: remove quotaoff symlink before install (Konstantin Khlebnikov) * warnquota: Fix some leaks in LDAP lookup code (Jan Kara) * warnquota: Don't CC empty names (Jan Kara) * Fix typos in German translation (Michael Meskes) * quota_nld: Fixup build (Jan Kara) * edquota: Do not unnecessarily overwrite limits/times (Jan Kara) * edquota: Fix error handling (Jan Kara) * edquota: Reopen the file with new grace times (Jan Kara) * edquota: Unify code for editing grace times and quota limits (Jan Kara) * Fix the po generating by accidentaly ignoring POTFILES.in file (Tomáš Chvátal) * Install example file to docs. (Tomáš Chvátal) * Ignore generated tarballs. (Tomáš Chvátal) * config.h.in is autogenerated. (Tomáš Chvátal) * Use just one define to determine if using ext2direct (Tomáš Chvátal) * Stop using deprecated ldap_perror (Tomáš Chvátal) * Refresh and fix the po files. (Tomáš Chvátal) * Create new autotools buildsystem (Tomáš Chvátal) * Add release script (Jan Kara) Changes in quota-tools from 4.01 to 4.02 * Remove KERN_KNOWN_QUOTA_VERSION (Jan Kara) * Skip NFS mounts without rquotad RPC service silently (Petr Písař) * Fix handling of space and inode values (Jan Kara) * Update polish translation (Jakub Bogusz) * warnquota: Use LDAP for looking up CC value as well (Jan Kara) * Prevent from grace period overflow in RPC transport (Petr Písař) * Do not document location of quotaon and quotaoff (Petr Písař) * Properly handle signed space and inode values (Jan Kara) * respect CFLAGS in linking command wrt #446281 (Julian Ospald) * Explain in quota(1) manpage what 'blocks' in the output mean (Jan Kara) * __cpu_to_le16 --> htole16 (Cristian Rodríguez) * Use libc byteswapping routines not kernel ones (Cristian Rodríguez) * quota_nld: Fix compilation warning (Jan Kara) * quota_nld: Fix usage of netlink multicast groups (Jan Kara) * Improve rpc.rquota(8) manual page (Petr Písař) * Add warnquota.conf(5) manual page (Petr Písař) * Add quotatab(5) manual page (Petr Písař) * Add quotagrpadmins(5) manual page (Petr Písař) * Silent a set-but-not-used warning about sbflags (Petr Písař) * Add support for CVS and XML output formats to repquota(8) (Jan Kara) * Remove installation of manpages into section 2 (Carsten Grohmann) * Close FILE handles on error (Petr Písař) * Add AC_PREREQ to configure.in (Theodore Ts'o) * Fix various usage mistakes (Petr Písař) * Correct quotasync exit code (Petr Písař) * Complete quotasync usage (Petr Písař) * Add quotasync(1) manual page (Petr Písař) * quotacheck: Make sure -d provides at least as much information as -v (Jan Kara) * Do not fiddle with quota files on XFS and GFS (Petr Písař) * Recognize units at inode limits by edquota (Petr Písař) * Recognize units at inode limits by setquota (Petr Písař) * Recognize units at block limits by edquota (Petr Písař) * Recognize block limit units on setquota standard input (Petr Písař) * Recognize units at block limits by setquota (Petr Písař) * Fix compilation without RPC support (Jan Kara) * Make group warning message more official (Petr Písař) * Updated Czech translation (Petr Písař) * warnquota: Use current locale as default charset (Jan Kara) * warnquota: Add MIME-Version header (Jan Kara) Changes in quota-tools from 4.00 to 4.01 * fix compilation failure with --enable-bsd_behaviour=no (Jan Kara) * fix quota(1) for NFS mountpoints (Jan Kara) * fix reporting of huge quota limits over rpc (Jan Kara) * fix repquota to report all users on XFS (Jan Kara) * fixed edquota(8) for more users (Jan Kara) * remove fixed limit on number of autofs mount points (Jan Kara) * add quota type names to message catalogue (Jan Kara) * typo fixes, message changes for easier i18n (Jan Kara) * created Czech translation (Petr Pisar) * store PID of quota_nld into lock file (Petr Pisar) * warnquota: Fix manpage formatting (Jan Kara) * warnquota: Allow specifying of filesystems to check (Jan Kara) * add support for quotas on ext4 in system files (Jan Kara) * quotaon: Remove duplicated check for hasquota() (Jan Kara) * quotacheck: Fix warning about journaled quota for 3.0 and newer kernels (Jan Kara) * edquota: Fix localication of time units (Jan Kara) * rip out ALTFORMAT config option (Jan Kara) * add support for dynamic RPC block to support larger quotas (Petr Pisar) * check set limits fit into the range supported by RPC transport (Petr Pisar) * do not report missing utmp record to syslog (Petr Pisar) Changes in quota-tools from 4.00-pre1 to 4.00 * get_qf_name() does not check quota file presence (Petr Pisar) * report quotacheck failures by return code (Petr Pisar) * make global symbols static as possible (Petr Pisar) * implement repquota for filesystems without quota files (Jan Kara) * initialize v2r1 ddquot padding in dump (Jan Kara) * fix ddquot buffer leak (Petr Pisar) * fix check in setgraces() in setquota.c (Petr Pisar) * forbid grace time setting over RPC (Jan Kara) * fix synopsis and properly report errors during remote grace period setting (Jan Kara) * do not use real domains in warnquota example (Petr Pisar) * make RPC handle properly host names with colons (Jan Kara) * explain meaning of the second column in repquota output (Jan Kara) * initialize vfsold block and inode value boundaries for new quota file (Petr Pisar) * setquota manpage typo fix (John Bradshaw) * implement quotacheck for GFS2 (Abhijith Das) * add quotasync tool (Abhijith Das) * correct --no-mixed-pathnames documentation (Petr Pisar) * allow admin to not strip quota binaries while installing them (Jan Kara) * document --always-resolve at edquota and setquota (Petr Pisar) * comment example quotatab to silent warnquota (Petr Pisar) * improve comments in warnquota.conf (Ondrej Vasik) * fix help text for quotaoff (Ondrej Vasik) * make quota, setquota, and edquota recognize -h option (Ondrej Vasik) * check whether set limits fit into range supported by quota format (Jan Kara) * add next3 support (Amir G) * remove checking of filesystem type from hasquota() (Jan Kara) * create quota-nfs.sh script for nicer quota(1) output formatting on some NFS clients (Jan Kara) * add options for quota(1) modifying formatting of filesystem identificaion (Jan Kara) * minor updates of manpages (Jan Kara) * quotactl manpage was moved to man-pages package (Jan Kara) * fix quotaon to work properly with XFS filesystems (Eric Sandeen, Jan Kara) * fix quotaon to print all informational messages only in verbose mode (Jan Kara) * fix warnquota manpage to not speak about RPC (Jan Kara) * fix repquota to get latest quota info header (Jan Kara) * do not count system inodes into quota for ext[234] (Jan Kara) * improve detection of XFS kernel quota interface (Jan Kara) * support of GFS2 filesystem (Christoph Hellwig) * avoid memory corruption of NULL address (Petr Pisar) * fixup typos in manpages (Michael Meskes) * added german translation (Michael Bunk) * added --enable-static-link configure option (Jan Kara) Changes in quota-tools from 3.17 to 4.00-pre1 * don't try to set inode flags when getting them failed (Michalski Wojciech) * added liblber to the list of libraries needed for LDAP support (Michael Meskes) * Rewritten configuration script to create config.h (Jan Kara) * Use /proc/mounts for mountpoint scanning (Jan Kara) * Removed use of reserved identifiers (Jan Kara) * Improved manpage of quota_nld (Eddie Eyles) * Fixed long option handling of quota_nld (Jan Kara) * Fixed error reporting when rpc format specified on command line (Jan Kara) * Convert quota limits using rq_bsize from RPC request (Jan Kara) * Added noreturn attribute to die to avoid false warnings (Jan Kara) * 64-bit quota support, rewritten some code to allow clean integration (Jan Kara) * Improved header of quota an repquota output when -s option is used (Jan Kara) * Fixed mountpoint scanning when NFS mountpoint is specified on command line (Jan Kara) * Updated manpage of quotactl(2) (Jan Kara) Changes in quota-tools from 3.16 to 3.17 * Updated quotactl(2) manpage to mention possible ERANGE error (Jan Kara) * Fix hostname checking of rpc.rquotad. It could allow access even though hostname was in /etc/hosts.deny (Jan Kara) * do not allow setting of user's grace time when softlimit is not exceeded (Jan Kara) * fix reference to rpc manpage (anonymous reporter) * add EXT4 (not only EXT4DEV) to the list of supported filesystems (Mingming Cao) * fix setting of more than 31-bit block and inode limits (Gui Xiaohua) * fixed bug in error reporting when quota reading fails (Jan Kara) * added support for quota formats with hidden quota files (Jan Kara) * remove IMMUTABLE flag from quota file in quotacheck (Jan Kara) * fix bug in warnquota which could result in bogus hostname and domainname (anonymous reporter) * implemented writing of messages that user got below hard/soft limits to quota_nld (Jan Kara) * use PKG_CHECK_MODULES to check for DBUS (Ladislav Michnovic) * Implement setting of charset for emails sent by warnquota (Michael Meskes) * Added quota_nld to the list of installed programs (Jan Kara) * some typos fixes (Matthew Boyle) * fixed possible segfault when unpriviledged user run edquota (Matthew Boyle) * fixed format strings to use "%llu" and "%lld" instead of "%Lu" and "%Ld" (Ladislav Michnovic) * removed ssl, resolv, lber from the list of LDAP libraries since we don't need them directly (Jan Kara) * added limits.h include to quota_nld (Jan Kara) * fixed repquota to work with limits over 4 TB (Jan Kara, Michael Meier) Changes in quota-tools from 3.15 to 3.16 * added information message about journaled quota to quotacheck (Jan Kara, Alex Tomas) * added pointers to quota_nld and warnquota to some manpages (Jan Kara) * ported quota_nld to libnl-1.1 (Jan Kara) * let setquota batch mode accept comments and blank lines, add -c option (Jacky Bruno, Jan Kara) * print more verbose list of compile options when --version specified (Jan Kara) * quotaon(8) should work only on local filesystems (Ladislav Michnovic) * made possible to use quota rpc in mixed NFSv3 and NFSv4 environments (Jan Kara) * fixed compilation with openLDAP library versions 2.1 and 2.2 (Jan Kara) * always define allow_severity and deny_severity for older versions of libwrap (Martin Jacobs) * cleaned up host_access() handling (Jan Kara) * configure script now correctly reports checking of libwrap (Jan Kara) * added MPFS to the list of supported filesystems (Dave Boone) * all binaries are now stripped during installation (Jan Kara) * updated Polish translations (Jakub Bogusz) * fixed typo in a quotaon message (Jakub Bogusz) * fixed warnquota to check URI only if LDAP enabled (Michael Meskes) Changes in quota-tools from 3.14 to 3.15 * added a wrapper script around setquota which also updates LDAP (Stefan Adams) * implemented quota netlink daemon to listen to kernel netlink messages and send them to DBUS and / or write them to the console (Jan Kara) * modified configure scripts and warnquota to check for new LDAP library and allow use of URI (Jan Kara) * fix LDAP scripts to set VISUAL instead of EDITOR (Michael Meskes) * added ext4 filesystem to the list of supported filesystems (Jan Kara) * pot.o is now compiled with CFLAGS (Ladislav Michnovic) * use -fPIE for compilation when available (Jan Kara, Ladislav Michnovic) * fixed some more problems XFS quotaon (Kouta Ooizumi, Jan Kara) * fixed two mistakes in quotaon(8) manpage (Utako Kusaka) * added option -A to quota(1) to report all NFS mountpoints (Jan Kara) * fixed XFS handling to work with loopback mounted devices (Jan Kara) * fixed mountpoints scanning to make XFS -x delete command work (Jan Kara) * fixes of signed vs unsigned int issues (Jan Kara) * fixed a format string bug in reporting of raw grace times in repquota (Jan Kara) * added repquota(8) and quota(1) option for better parsable output (Jan Kara) * fixed error handling in edquota(8) when creating tmp file (Jan Kara) Changes in quota-tools from 3.13 to 3.14 * updated Polish translations (Jakub Bogusz) * print user/group names in error messages when cannot get quota information (Michal Marek, Jan Kara) * added option --always-resolve to force resolving even names with digits only (Jan Kara) * minor language corrections in manpages (Jan Kara) * implemented long options parsing for all quota tools (Jan Kara) * quota(1) has -f option to specify filesystem list (Jan Kara) * corrected some informal language in messages (Jan Kara) * we cannot even stat NFS mounts in local mode as server may be unreachable (Jan Kara) * fixed error messages in getprivs() (Jan Kara, Brian Morris) * made UID/GID prints unsigned (Matthew Kent) * fixed very verbose printing for quotacheck (Jan Kara) * fixed off-by-one bug in mount options parsing (Jan Kara) * implemented nicer message formatting for warnquota(8) (Jan Kara) * quota(1) has -w option to supress line wrapping for long device names (Jan Kara) * quota(1) prints grace time even if hard limit is reached (Jan Kara) * fixed journaled quota format detection in quotacheck (Jan Kara) Changes in quota-tools from 3.12 to 3.13 * fixed mistakes in several error messages, improved error reporting functions (Dmitry V. Levin) * volume label and UUID support for reiserfs (Jan Kara) * support for LABEL= and UUID= on a command line (Jan Kara) * parse NFSD export table to find pseudofilesystem root for NFSv4 (Jan Kara) * handle better when quota file should become empty (Niu YaWei) * minor manpage and help-text fixes (Jan Kara) * fixed quotacheck(8) to check each block only once (Jan Kara) * fixed quotacheck(8) messages about corrupted blocks (Jan Kara) * fixed quotacheck(8) to rename quota files after turning quotas off (Jan Kara) * added sanity check to quota reporting (Jan Kara) * fixed check for illegal references in quotacheck(8) (Jan Kara) * added NFSv4 to the list of supported fs types (Jan Kara) * updating of progress is now less frequent - should speedup quotacheck -v a bit (Jan Kara) * added printing of directories to quotacheck(8) (Jan Kara, Jan Engelhardt) * added dynamic mountpoint array allocation (Jan Kara) * made quotacheck(8) more friendly to journaled quota (Jan Kara) * changed configure to detect whether nls is needed (Tomasz Kloczko, Jan Kara) * added JFS into a set of supported filesystems (David Kleikamp) * added French translation (Jerome Schell) * fixed quota tools to set of grace time only after exceeding soft limit, not at reaching (Jan Kara) * fixed exit codes of setquota(8) and edquota(8) (Jan Kara) * updated Polish translations (Jakub Bogusz) * fixed "bashism" is Makefile (Michael Meskes) Changes in quota-tools from 3.11 to 3.12 * fixed bug in quotaon(8) reporting (Paul Szabo) * added manpages for xqmstats & quotastats (Max Vozeler) * fixed a few memleaks (Jan Kara) * fixed bug when root had no usage and limits (Jan Kara) * added a few perl wrappers for LDAP (Stefan Adams) * added note about availability of -r option to manpages (Jan Kara) * maximal number of groups is now got via sysconf (Nathan Scott) * added batch mode to the setquota(8) (Jan Kara) * added reference to setquota(8) to manpages of other tools (Jan Kara) * fixed bug in --port option of rquotad (Max Kalika) * updated quota documentation (Jan Kara) * disabling nls via configure (Jan Kara) * fixed warning when gettext not used (Peter Breitenlohner) * fixed typo in rquotad.8 (Peter Breitenlohner) * fixed compiler warning in quotacheck.c (Peter Breitenlohner) * added config option for putting some important binaries to /sbin regardless $(prefix) (Jan Kara) * added config option to warnquota(8) for CCing admin only specified amount of time before grace time runs out (Jan Kara) Changes in quota-tools from 3.10 to 3.11 * quota-tools should again use old RPC protocol when needed (Jan Kara) * add FIOQSIZE for x84_64 architecture (Jan Kara) * quotacheck(8) does not count quota files to usage (Jan Kara) * tools now honor journalled quota mount options (Jan Kara) * manpage of repquota(8) stated falsely that repquota works over RPC (Jan Kara) * added -T flag to quot(8) to avoid truncation of names (Andre Nathan) * added -q flag to quot(8) to avoid sorting of names (Andre Nathan) * added #include in quotasys.c to avoid compile problems on some systems (Jan Kara) * changed detection of filesystem to be able to parse comma separated list (Jan Kara) * fixed bug in quotacheck(8) which counted wrongly files larger than 2GB (Posta Zoltan) * fixed compile problem with quotacheck and new kernels (Michael Meskes, Jan Kara) * fixed typo in quotacheck manpage (Noel Koethe) * warnquota(8) can get mail addresses via LDAP (James Bourne) * warnquota(8) can avoid sending e-mail when user is over quota on mail partition (James Bourne) * fixed bug in quotacheck(8) which counted directories twice sometimes (Jan Kara) * edquota(8) now allows parameters in VISUAL/EDITOR env. params (Jan Kara) * reverted changes in detection of kernel from 3.10 - interface obsoleted in 2.6 kernel (Jan Kara) Changes in quota-tools from 3.09 to 3.10 * alternative port can be specified to rpc.rquotad by -p option (Jan Kara) * Fixed processing of device-backed loop mounts (Jari Ruusu) * Fixed fake error messages from rpc.rquotad (Jan Kara) * quota(1) now does not print info for NFS filesystems without quotas (Jan Kara) * XFS roothack option disabled by default (Nathan Scott) * added option to warnquota(8) to supress details of report (Marco van Wieringen) * fixed problems with multiple lines values in warnquota(8) (F. Depke) * changed detection of kernel interface so that it works even without /proc (Jan Kara, Johan Ekenberg) * updated Polish messages (Jakub Bogusz) * updated quotactl(2) manpage (Jan Kara) * fixed bug in -f option of edquota(8) (Jan Kara) * fixed formatting bug in warnquota(8) (Jan Kara) * added option -s (choice of more appropriate units) to warnquota(8) (Jan Kara) Changes in quota-tools from 3.08 to 3.09 * minor update of quota(1) manpage (Jan Kara) * quotacheck(8) now remembers only hardlinked files and not all inodes with n_link > 1 (Jan Kara, Jan Kasprzak) * quotacheck(8) doesn't store structures for all users in old quota format (Jan Kasprzak) * fixed minor bug in documentation (Jan Kara, Lucas Brasilino) * repquota(8) handles multiple entries in /etc/passwd better (Jan Kara) * made tools not to touch mountpoints mounted without quota options (Jan Kara) * added option for ignoring autofs mountpoints to quota(1), quot(8), repquota(8) and rpc.rquotad(8) (Jan Kara, Paul Szabo) * updated xqmstats (Nathan Scott) Changes in quota-tools from 3.07 to 3.08 * Fixed infinite loop in quotacheck under RH7.1 (?) * Made quota tools aware of /etc/services (H. J. Lu) * Updated edquota(8) and setquota(8) to allow setting of individual grace time (Jan Kara) * Fixed bug in convertquota(8) when quota was turned on during converting (Jan Kara) * Add support for XFS filesystems without root special casing (Christoph Hellwig) * XFS documentation updates (Nathan Scott) Changes in quota-tools from 3.06 to 3.07 * Added creation of bin and sbin dir during make install; removed hardcoded /sbin directory for some utilities. (Jan Kara) * Add support for 32 bit uid's and gid's when using EXT2_DIRECT. (Michael Meskes) * updated manpage of rpc.rquotad (Jan Kara) * setquota is disabled by default in rpc.rquotad (Jan Kara) * setquota using RPC is disabled by default in configure (Jan Kara) * rised maximal number of mountpoint to 256 (Jan Kara) * small fix in configure (Nathan Scott) * small fix in quotacheck(8) docs (Jan Kara) * fixed quotacheck(8) to continue when old quota files were not found (Jan Kara) * quota(1) now doesn't report failure to connect to rpc.rquotad server when -Q specified (Jan Kara) * add quota(1) option -l (report only local filesystems) (Jan Kara) * warnquota(8) now also mails specified member of the group about violation of the group quotas when -g option is specified (Jan Kara) * added options by which user can specify whether repquota(8) should translate names in big chunks by scanning all users or individually. Added automagic detection using nsswitch.conf which behaviour should lead to faster translating. (Jan Kara) Changes in quota-tools from 3.05 to 3.06 * fixed caching of libwrap configure result (Jan Kara) * fixed copying of quotafile name from mtab (?) * warnquota.conf is now installed in config dir (Jan Kara) * updated format detection to reflect changes in kernel interface in 2.5.18 (Jan Kara) * fixed scanning of non-mountpoint directories (Jan Kara) * fixed detection of XFS format (Jan Kara) * fixed printing of 'over softlimit sign' in quota(1) (Jan Kara) Changes in quota-tools from 3.04 to 3.05 * quota tools should honour 'noquota' mount option (Jan Kara) * fixes in manpages (Arkadiusz Miskiewicz) * fixed detection of libwrap in configure (Arkadiusz Miskiewicz) * added forgotten ROOTDIR to path to gettext catalogs (Arkadiusz Miskiewicz) * quotacheck uses newest format supported by kernel when creating new quota files (Jan Kara) * fixed bug in IO initialization when -F xfs was given (Jan Kara) * added support for quota 6.5.1 (Jan Kara) * quotaon(8) now can get format parameter (Jan Kara) * fixed bad return value of quota(1) (Jan Kara) * fixed bug in quota format format detection (Jan Kara) Changes in quota-tools from 3.03 to 3.04 * added -D_FILE_OFFSET_BITS=64 to Makefile - fixes problems with large files with some libcs (Michael Meskes) * added -p (print state) to quotaon (Vladimir Linek, Jan Kara) * made quotaon(8) write better error messages (Jan Kara) * make install now creates man directories (Jan Kara) * added -q and -c options to warnquota(8) (Jan Kara) * added some notes about quotatab to warnquota manpage (Jan Kara) * fixed bug in options parsing of warnquota(8) (Michael Meskes) * ignore automount mountpoints (Philippe Troin) * fixed minor bug in printing grace times (Jan Kara) * fixed quotaon(8) behaviour when it sees newer kernel then it's able to handle (Jan Kara) * minor formatting change in quotactl(2) manpage (Nathan Scott) * init_io() is now more paranoid about quota turned on in kernel (Jan Kara) Changes in quota-tools from 3.02 to 3.03 * added -f option (perform operation only for given filesystem) for edquota (Jan Kara) * quotacheck now skips quota file scanning when file not found (Jan Kara) * repquota shouldn't show grace times when softlimit is not exceeded (Jan Kara) * removed bogus error message in mountpoint scanning (Jan Kara) * fixed mountpoint scanning initialization (solved rpc.rquotad SEGFAULT) (Jan Kara) * rpc.rquotad now doesn't need mountpoint for quota operations (Jan Kara) * fixed compilation on sparc (Michael Meskes, Jan Kara) Changes in quota-tools from 3.01 to 3.02 * added -n option (don't resolve names) to repquota (Jan Kara) * quota tools now correctly handle zero grace times in old format (Jan Kara) * edquota, setquota commit just grace times and flags - fixed possible races when used on live filesystem (Jan Kara) * another fix to quotastats (Jan Kara) * added check to format detection for bad endianity (Jan Kara) * implemented conversion of files with bad endianity (Jan Kara) * fixes in warnquota, warnquota now allows line splitting by '\', text of mail can be specified in config file (Jan Kara) Changes in quota-tools from 3.01-final to 3.01 * quotastats should now work better on old kernels (Jan Kara) * quotacheck is more strict in checking it's arguments (Jan Kara) * edquota and setquota should be now save to run for working user (number of used blocks and inodes could be wrong in previous versions) (Jan Kara) Changes in quota-tools from 3.01-pre9 to 3.01-final * quotacheck is using ext2_ino_t if defined (Jani Jaakkola, Jan Kara) * rpc.rquotad now closes stdin, stdout unless run on foreground (Jani Jaakkola) * setquota can be disabled in rpc.rquotad by commandline option (Jani Jaakkola) * quota-tools should now work well also on RH 7.1 (Anders Blomdell, Jan Kara) * quotacheck makes backup files only when told by option (Preston Brown) * quotacheck now uses vfsv0 format when no quotafile is found (Jan Kara) * fixed mountpoint scanning bug when bad mountpoint was specified (Jan Kara) * fixed bug when device was specified instead of mountpoint (Preston Brown) * fixed bug when scanning mountpoint NFS mounted filesystem (Jan Kara) * repquota now resolves more names at once which makes it a lot faster (Jan Kara) Changes in quota-tools from 3.01-pre8 to 3.01-pre9 * Improved host access handling (Jan Kara) * Improved RPC error reporting (Jan Kara) * Fixed bug in quotaon when run of kernel with XFS (Jan Kara) * Implemented new mtab scanning with fallback to fstab when mtab not found (Jan Kara) * Improved speed of repquota for old quota format (Jan Kara) * New Makefile style (Jan Kara) * Fixed bug in configure in detecting of e2fslib (Jan Kara) * Implemented automatic choice of units in quota(1) and repquota(8) (Jan Kara) Changes in quota-tools from 3.01-pre7 to 3.01-pre8 * Fixed typo in option in convertquota. (Jan Kara) * Grace times are updated when quota limits are set. (Jan Kara) * Fixed possible segfault in rpc.rquotad when no filesystems with quota were found. (Jan Kara) Changes in quota-tools from 3.01-pre6 to 3.01-pre7 * Fixed a bug in quotacheck (SEGFAULT on -aR) (Jan Kara) * Fixed bug in rquota (grace times) (Jan Kara) Changes in quota-tools from 3.01-pre5 to 3.01-pre6 * Fixed bug in quotacheck for new quota format (it created corrupted quota files). (Jan Kara) * Fixed bug in version reporting for quot. (Jan Kara) * repquota now has -t option - when specified it will be truncating names so output will be nicer (Jan Kara) Changes in quota-tools from 3.01-pre2 to 3.01-pre5 * Fixed endian bug in the ext2 mount by LABEL or by UUID handling code, and added XFS support to this code also. (Nathan Scott) * Fix bug in handling of multiple mount points sharing the same device. (Jan Kara) * Fix warnquota output for devices with long names. (Jan Kara) * Updated man pages. (Jan Kara, Nathan Scott) * Added a port of the BSD quot(8) utility, with XFS support. (Nathan Scott) * Added xqmstats(8) utility for reporting activity statistics for the XFS Quota Manager - XQM. (Nathan Scott) * Fix up numerous compiler warnings and all the minor problems that revealed - package now compiled with -Wall by default. (Jan Kara, Nathan Scott) * Rewrote the error output handler (now uses errstr function) which also displays the correct programname of the program issueing the error. * Additional configure option BSD_BEHAVIOUR for more the old BSD behaviour as wanted by some people. * EOF -> -1, sprintf -> snprintf fixes * Don't turn quotas on on NFS * Fixed quota format detection, related bugs in quotaon * IO code now allows readonly access, doesn't open quotafile when not needed * Fixed bug in old quotaformat initialization * quota(1) now exits with nonzero exitcode when over quota * Manpage cleanup Changes in quota-tools from 2.00 to 3.01-pre2 * This is a complete rewrite of the quota package, most importantly adding support for the new Linux quota format and also support for XFS quota. * The internal data structures and algorithms were redesigned and rewritten by Jan Kara (jack@ucw.cz) so that different versions and different types of quota can be used with these tools. * Support for XFS quota has been added by Nathan Scott (nathans@sgi.com). * Add options like RPC, ALT_FORMAT, RPC_SETQUOTA, EXT2_DIRECT to configure. (Jan Kara) * Fix atoi() -> strtol() and detect mistakes in numeric input. (Jan Kara) * Add '-V' option to all tools to display the version. (Jan Kara) * Reworked time conversion routines. (Jan Kara) * setquota - added -t parameter and allow variable number of filesystems to be specified. (Jan Kara) Changes in quota-tools from 1.70 to 2.00 * Added patches from Steven Walker for supporting rpc_setquota call and tcp-wrappers check in rquotad. * Splited quota manipulation from setquota, edquota, quota etc. to quotaops.c so things are coded only once. Also added support for remote quota editing and setting using rquota extensions. * Fixed problems with parsing of /etc/fstab in hasquota.c (incorrectly assumed that it was the only option followed by an '='). Patch by Simon Huggins . * Extracted quota-io into quotaio.c so we only need to update repquota.c and quotaio.c when we change the way quotas are stored in the quotafile for bigger uids and gids. * Added prototype user copying to setquota ala edquota -p only this time only for a specific filesystem. * Fixed quota tools for quotas bigger then 4 Gb. Patch by Stephen C. Tweedie * Changed rpc.rquotad to scan all device entries in /dev to support also devfs systems and systems with special hardware RAID controllers. * Added autoconf support to the quota-utils. Patches by Andreas Gruenbacher * Added extra filesystem types to mntent to reflect the current linux filesystems * Rewrote hasquota.c to check for the MNTOPT_QUOTA option. (Request from Phil Stracchino ) * Removed searching of /dev dir from rquota_server. Only lookup mounted filesystems. (Patch by Roman Kagan ) * Added gettext NLS support all credits go to the guys named in the README.gettext. * Added the redhat patches to the standard tree. * blocksize patch * fhs patch * hjl patch * label patch * SPARC patch * Changed Q_SETQUOTA to Q_SETQLIM in quotaops.c for the putprivs function. This fixed a problem where we restore bogos usage info by edquota etc. when a user resets its quota usage while running for example edquota. We should only change the limits because thats the only things we can change using these kind of tools. (Bug report by Dr. Michael Meskes from the Debian bug-archive) * Added numeric option to quota and setquota to allow to set quota for users/groups not in the localy known through name-services. (Modified the patches send by Oscar Martín ) Changes in quota-tools from 1.65 to 1.70 * Fixed problems when turning off one type of quota taking offline the other type too. * Fixed bugs as reported on bugtraq for negative ids and problems with usernames with only digits. * Added setquota (to se quotas from the commandline) as send to me by Martin Bene Changes in quota-tools from 1.60 to 1.65 * Created new diffs again for the newer kernel (2.1.[78]x). * Added sample program that copies quota-settings from one user to an other. * Added /etc/quotatab support as developed by Jon Lewis * Added some changes to /usr/src/linux/fs/nfsd/vfs.c to support quotas for the kernel-nfsd too. (Most other filesystems are gone and the ones remaining either don't need quotas or are not used by big groups of users.) Changes in quota-tools from 1.55 to 1.60 * Added new option to kernel root_squash which means when that option is set the kernel system treats root as any normal user and he cannot write to any file anymore without obeing the quota limits. * Added support for root_squash to quotaon and quotaoff using the new rsquash option in mntent. In the run also rewrote the hasquota function. * Added patches to Makefile.std which should make it more FSSTND compliant. * Added extra check to rpc.rquotad to check the special device type when scanning the /dev dir for the right device. Changes in quota-tools from 1.52 to 1.55 * Added all patches and enhancements I collected the last few months. (As always some have undergone some rewriting and are only a special option. But they are in) * Changed check on ruid in edquota to an access-check on the quota-files. If you have write permissions on the quota-files as a group its probably ok to allow you to change the quotas. If not the system operator should take apropriate actions. Install edquota SUID-root if you want people who are able to write to your quotafiles to change quotas. If you don't install it SUID root it will only update the files which can give strange problems with the kernel overwriting your updates. * Added the EPS-file of the sheets from Remy Card which he used at the Berlin Linux seminar. And because they describe everything in detail its a nice enhancement to the current HTML docs. Changes in quota-tools from 1.50 to 1.52 * Hopefully fixed some problems with makefiles and the like. * Did some rewrite on the mountlist handling, removed limit on number of superblocks by allocating them within the mountlist. (This code is not available within the standard kernel. Until I find the time and feel like it I will put all my new enhancements in my very own (just a bit different) kernel sourcetree back into the mainstream kernels.) Changes in quota-tools from 1.34 to 1.50 * Wrote some new docs, right into html use Mosaic, Netscape or lynx or whatever HTML-browser to see whats in. Also did the manual-pages, its just a quick hack hope this helps people using quota. * Added DIRECT EXT2 access to quotacheck which should make scanning ext2 disks quite some faster. On the other hand you now need the ext2fs libs to compile the quotacheck program. (Enhancement by Edvard Tuinder) * Added dquot_operations to include/linux/fs.h * Changed include/linux/quota.h according to new standard. * Changed fs/dquot.c according to new standard. * Added support to quotaon-systemcall for initializing the superblock with a pointer to the dquot operations. * Remove fs/fileio.c and include/linux/fileio.h including all references to it. * Added support to the different filesystems to call the new dquot_alloc and dquot_free functions on block/inode allocation or freeing. (currently ext2) * People can add support to any filesystem if they want, for now I have been lazy and only implemented it for ext2-fs. Which by the way is probably the most difficult of all the filesystems. If one feels up to it you can try adding it to your favorit filesystem. I will accept patches, and include them with or without changes. * Added some patches for dynamic allocation of quotafilenames in hasquota. (patches by Remy Card) * Rewrote quota_transfer again, as a never ending story... * A new run off cleanups have been taking place, removed the QF_OPENING and QF_CLOSING flags because we don't need them anymore. The new code uses dquot pointers. If we initialize the dquot pointer after we have setup everything we don't have do be afraid that we get dqget calls while we don't want them. * Fixed some bugs with not dropping dquot pointers which lead to memory leaks in the long run because dquots kept being hold because the kernel thought it was still being used. * Added some stats to the code which can be viewed with quotastats. Not real interesting at the user level but quite handy debugging the quota system. Changes in quota-tooles from 1.33 to 1.34 * Changed hasquota.c to not insert a slash when the mnt->mnt_dir already ends with a slash. So something like //quota.user shouldn't happen anymore. * Cleaned up fs/fileio.c, removed some unneeded dummy_inodes in unlink and rmdir vfs functions. Now rely on incrementing i_count when deleting a dir or file and release it when I iput the inode. Should work because when a executable is running when it gets deleted this also happens. Also renamed and cleanup the rest of the funtions. vfs_rename function should now also work for a hardlinked file. * Changed vfs_chown functions to reset SUID and SGID on a chown because the new kernel wants that. * Changed locking on I/O to use semaphores instead off the mnt_flags used before. The old stuff could lock quota easily probably because the operation wasn't atomic. This should now be fixed. * Fixed check_bdq to only give back a available blocks when the current number of blocks are below the hardlimit. There was a bugfix for this one so I applied that. * Changed has_quota funtion to use a static buffer instead of mallocing one everytime it needs one. Hope this helps with the reported memory leak on the rquotad. * Fixed some little bugs in dquot.c with the setting of the QF_OPENING flag and not resseting it on failure of opening the quotafile. * Added changes needed because the VFS-layer changed to use iattr structs for the notify_change function. * Fixed quota_transfer to work again with the new iattr structs, hopefully it works ok now. It was brought to my attension that it wasn't working the way it should in the old version. So I first checked out the fix that I received, but that didn't solve the problem either so I fixed it myself. * Combined the new writeaccess stuff with the stuff I already had. Also cleaned up vfs layer some more because of the use of the new vfs_getwriteaccess and vfs_putwriteaccess functions. This also involved the quotaon function that should now return a propper errno on failure and not the standard EIO that it was in earlier versions. Changes in quota-tools from 1.32 to 1.33 * Ported the stuff back to the normal kernel to make a diff-file quite easy. * Fixed some typos that could trigger a kernel panic because the locking gets killed when a quota is exeeded. * Fixed the stuff to work with the the new-tty-drivers. * This patches aren't that well tested on the machines I use because I use a complete different kernel over here. But thats why this is called BETA software. The bigfiles in this package are copies of the files used in my kernel so some thing are tested more then others. * Fixed quotacheck not to memset the whole quota when there are no blocks allocated by this user. Changes in quota-tools from 1.31 to 1.32 * Fixed diff-files, the are now made as unified diffs. * Checked the specifications for the rquota service, I was correct we only need to respond to udp connections. Changes in quota-tools from 1.3 to 1.31 * Changed quotacheck program to stuff directories it encounters on a directory stack and check them later on. This way there is at any time one directory opened for reading. In the old situation it could happen that more then one directory were open at the same time and with nasty directory structures this could give to much open directories at ones, leading to an error by the O.S. * Added some hooks for debugging the memory usage by the program, and make the stdout used for the -v flag non-buffered for more speed. * Added variabele to mountstruct for flags, now we can mask when we are opening or closeing a quotafile, when we are we may not give out pointers with the dq_get function, otherwise we run into problems later on. * Ok updated fs/*.c missed patch to fs/inode.c that solves a race condition. * Added vfs_rename function that takes care of renaming files on top of already existing files. We were missing those ones, thanks to David Black for reporting this. If there are still problems I will hear so and try to fix them as soon as I can. Changes in quota-tools from 1.2 to 1.3 * We only reply to rpc_quota_request made to the udp port of the rquotad, I just removed support for the TCP service, I don't think it's needed to have the TCP service for just exchanging about 40 bytes of data. Too much overhead setting up a TCP connection. * Changed vfs_write function within fileio.h to be a bit smarter. If the fileposition + number of bytes to be written is less then the current size of the file we should even bother checking it. And if the number of wanted_blocks equals to 0 why even bother checking the quota no changes are made anyway. * Rewrote the quota stuff to be much more flexible, we now use pointers that are located within the inode for fast lookup. This is a bit more to setup but is much faster when used over and over again. Its based on the setup used for inode caching and is mostly rewritten code with some extensions that were needed for the dquot structs. And of course a lot extra because dquot aren't exactly inodes. * Ok file is called dquot.c again because it specific to diskquotas. If we ever get process quota, we have to move the system-call interface to the kernel dir. * splitted fileio header into fileio.c and fileio.h. Fileio.c contains the code for all the functions, fileio.h contains the prototypes for the functions when quota is enabled and defines to the the default inode operations if it is disabled. * Moved device management code to the file fs/super.c and made it a bit more general. The stuff now can also be used for other purposes. For now it contains the devicename, the directory the filesystem is mounted on, a pointer to the superblock and the quota expire times and filepointers, this can be extended in the future and this can be used for other purposes then only quota. Its in super.c because it is related to mounting a filesystem. The rootfilesystem is a special case for which I don't have a nice solution right now. * Cleaned up the file file_table.c and renamed it to file.c, otherwise we should call inode.c inode_table.c etc. More is static now, the file_table isn't accesable anymore from everywhere, and the functions that need the info within file.c should be located within that file. A good example is the function used by the vhangup code, it now calls a routine within file.c and so we don't have export any data anymore. * changed decrement quota to reset the DQ_INODES and DQ_BLKS flag on a decrement of a quota. It seems that we should bark again when one goes over his quota after he removed something, ok should work this way. * changed set_dqblk to set the grace period when a new usage is set and one exceeds his softlimit by that operation. Better then just setting the graceperiod when he allocates any more inodes or blocks. Only can give surprises when logging in but who cares they can ask the sysadmin to give them a hand with cleaning there dirs. * quotaoff is very simple now just reset all the pointers that point to a dquot and trash the cache for all dquots that are related to the device being turned of. This way the next time you put it on the stuff get read again from disk and not from the cache. * changed most of the file structs to be a filepointer and request it with get_empty_filp. This way we allocate it from the file_table which is more the way it should be, Ok I know the dummy_inodes isn't that nice either, but for that we don't have an other choice. Also it makes live much easier this way. See the core dump stuff. * used some more constants for setting up the file pointers, this should make it easier to read. So ok Edvard ? * rewrote most functions such as quota_alloc, quota_remove and quota_transfer to use a for loop which counts from 0 to the number of quotas -1. This way it should be easy to extend the quota stuff to maintain even more types of quota. (At the moment I can think of one more, what about quotas for a processgroups) :-) * rewrote quota_transfer, its still the most complicated function of the three manipulate functions, but it looks much cleaner then the one we had. * changed the system-call interface again this should be the last time, hope to have it made more intelligent now, most of the calls are quite the same, so just set flags and call one functions. Saves some functions. * And more cleanups to the vfs-layer. Did a kind of indent on all the sources in the fs-dir by hand. All references to file pointers are now done by a variable that is called filp. This is done to be a bit more consistent all through the code. Before is was called file, filp, f etc. * As of the indent I changed all tabs to be 3 spaces this makes it a bit larger but much better to read. * Someone reported that there are problems with fstab when you use something like usrquota=/usr/adm/quota.user,grpquota=/usr/adm/quota.grp. I don't know if the problems is also in the new libs, if so I have a replacement here for the entire mntent stuff. I wrote this way back and it work ok so if you have problems mail me and I will send you the sources. For now I didn't include it yet in the standard mainline distribution. * Ok added hooks to the fork code forgot that, ok this has cost me some searching. We must doe an vfs_open_filp when a process forks and the filepointers are copied or incremented. Changes in quota-tools from 1.1 to 1.2 * Changed repquota.c to display at max 8 chars of username. * Changed rquota_svc.c and rquota_server.c to handle both version 1 and 2 requests. Now we should be able to communicate with sun systems. SUN systems send out version 1 request which we can handle now. * Changed quota.c to first send out a version 2 rquota request and if that fails to try it with a version 1 request. Now we should be able to query a rquotad on a sun-server exporting a NFS disk. * Changed kernel diffs, now use a header file fileio.h with vfs functions for writing, truncating, creating files/nodes. This cleaned up the kernel diffs quite a bit. (Should have done this way back, but it is done now) * Fixed some small bugs with handling graceperiods again. Changed the code in the systemcall interface all bugs should be gone now there. * Wrote a new program warnquota. No manpage yet but it has no flags so that's simple. You can run this from your crontab just like you run quotacheck every night from cron. This program mails a message to all users that violated the quota system. * Changed fileio.h with unlinking and rmdir to make a copy of the inode. Hope this fixes some problems we have seen with xiafs. It isn't to bad either should have been this way from the beginning. A pointer to a inode that is removed is a bit to tricky a copy in local memory is much saver. * Changed fs/quota.c to not check if the quotafile is on the same device as the device for which it contains info. Found that in a document but it's silly and so it's removed now. Who cares where you put it as long the kernel can find it and it is the right format. (Now something like usrquota="/var/adm/quota_src.user" should work :-)) * Changed edquota behaviour with -p flag. It now copies the current usage to the new situation. Changes in quota-tools from 1.0 to 1.1 * Moved check to test on quota on a certain filesystem to seperate file hasquota.c * Changed hasquota.c to use quotafile given in fstab file instead of the default name of a quotafile. We now can define ourself where to put our quotafile. Something like "usrquota=/usr/adm/quotasrc.user" * Changed graceperiod counting was doing it the wrong way around. Now we add the expiretime to the current time and that is the grace-period a user has before we see a softlimit as a hardlimit. * Changed allocation when not enough blocks can be allocated from ones quota. Now you get as many blocks as you can affort yourself and not as in the earlier version, nothing. This was a bit of a bitch to tackle but it seems to work ok now for regular files and core-files. * Changed the quota.h file to include a prototype for a new function blocks_to_isize that calculates the maximum isize for a file when allocating less blocks than requested. Also included macro's for min() and max(). * Added rquotad program for own convinience, this was build from scratch with only the rquota.x file. It seems to work quite nice between LINUX machines don't have the resources to test it with other then LINUX machines. We probably need a new version number for this type of rquota. Something like rquota version 2 or something like that. * Changed quota program to use a rpc-call to the rquotad on one of you disk server machines. See #ifdef RPC in quota.c. Use small timeout because I don't wanna wait to long when a machine is down. Increase it when you have problems with slow hosts. * Rewrite of quotacheck program. This one is much faster, about 60%. Thanks to Edvard for this big improvement. * Changed namei.c to iput the inode of a dir when doing a remove of a dir. I never had problems with it but it seems that ext2 doesn't care to much when you unlink a dir while you have the inode still open. Fixed it and it works now ok also on xiafs which had problems with it, and of course the fragment should have give this error because you have to iput the dir before you remove it. * Changed source of quotacheck to create new quotafile with at least the gracetimes. Now there should never be a problem when turning on quota with the quotactl systemcall after one has run quotacheck to create the correct quotafiles. * Changed code of quota.c to read MOUNTED(mtab) instead of FSTAB(fstab) when showing quotainfo. quota-4.09/Makefile.am000066400000000000000000000107151446321055100146400ustar00rootroot00000000000000ACLOCAL_AMFLAGS = -I m4 AM_LDFLAGS = @PIE_LDFLAGS@ AM_CFLAGS = -fPIC @WARN_CFLAGS@ doc_DATA = \ README.mailserver \ README.ldap-support \ set_limits_example.c \ doc/quotadoc.sgml sysconf_DATA = \ warnquota.conf \ quotatab \ quotagrpadmins man_MANS = \ convertquota.8 \ edquota.8 \ quotagrpadmins.5 \ quotacheck.8 \ quotaon.8 \ quotastats.8 \ quotasync.1 \ quotatab.5 \ quota.1 \ repquota.8 \ setquota.8 \ warnquota.conf.5 \ warnquota.8 \ xqmstats.8 dist_MANS = if WITH_NETLINK man_MANS += quota_nld.8 else dist_MANS += quota_nld.8 endif if WITH_RPC man_MANS += \ rpc.rquotad.8 \ rquota.3 else dist_MANS += \ rpc.rquotad.8 \ rquota.3 endif dist_MANS += $(man_MANS) SUBDIRS = po EXTRA_DIST = \ $(sysconf_DATA) \ $(doc_DATA) \ $(dist_MANS) \ $(rpcsvc_DATA) \ autogen.sh \ Changelog \ ldap-scripts noinst_LIBRARIES = libquota.a if WITH_RPC AM_CFLAGS += $(TIRPC_CFLAGS) rpcsvcdir = $(includedir)/rpcsvc rpcsvc_DATA = \ rquota.h \ rquota.x noinst_LIBRARIES += librpcclient.a librpcclient_a_SOURCES = \ rquota.c \ rquota.h \ rquota_client.c \ rquota_client.h \ rquota_clnt.c librpcclient_a_CFLAGS = $(AM_CFLAGS) -Wno-unused RPCLIBS = librpcclient.a BUILT_SOURCES = rquota.h rquota.c rquota_clnt.c CLEANFILES = rquota.c rquota.h rquota_clnt.c endif libquota_a_SOURCES = \ dqblk_rpc.h \ dqblk_v1.h \ dqblk_v2.h \ dqblk_xfs.h \ quotaio.c \ quotaio.h \ quotaio_v1.c \ quotaio_v1.h \ quotaio_v2.c \ quotaio_v2.h \ quotaio_tree.c \ quotaio_rpc.c \ quotaio_xfs.c \ quotaio_xfs.h \ quotaio_meta.c \ quotaio_generic.c \ quotaio_generic.h \ bylabel.c \ bylabel.h \ common.c \ config.h \ common.h \ quotasys.c \ quotasys.h \ mntopt.h \ pot.c \ pot.h libquota_a_LIBADD = \ $(RPCLIBS) bin_PROGRAMS = \ quota \ quotasync sbin_PROGRAMS = \ quotacheck \ quotaon \ repquota \ warnquota \ quotastats \ xqmstats \ edquota \ setquota \ convertquota if WITH_RPC sbin_PROGRAMS += \ rpc.rquotad endif if WITH_NETLINK sbin_PROGRAMS += \ quota_nld endif quotaon_SOURCES = \ quotaon.c \ quotaon.h \ quotaon_xfs.c quotaon_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) quotacheck_SOURCES = \ quotacheck.c \ quotacheck.h \ quotacheck_v1.c \ quotacheck_v2.c \ quota_tree.h \ quotaops.c quotacheck_CFLAGS = \ $(AM_CFLAGS) \ $(EXT2FS_CFLAGS) \ $(COM_ERR_CFLAGS) quotacheck_LDADD = \ libquota.a \ $(EXT2FS_LIBS) \ $(COM_ERR_LIBS) \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) quota_SOURCES = \ quota.c \ quota.h \ quotaops.c \ quotaops.h quota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) quotasync_SOURCES = quotasync.c quotasync_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) repquota_SOURCES = repquota.c repquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) warnquota_SOURCES = warnquota.c warnquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(LDAP_LIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) quotastats_SOURCES = \ quotastats.c \ common.c \ common.h \ pot.c \ pot.h quotastats_LDADD = \ $(INTLLIBS) xqmstats_SOURCES = \ xqmstats.c \ common.c \ common.h \ pot.c \ pot.h xqmstats_LDADD = \ $(INTLLIBS) edquota_SOURCES = \ edquota.c \ quotaops.c \ quotaops.h edquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) setquota_SOURCES = \ setquota.c \ quotaops.c \ quotaops.h setquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) convertquota_SOURCES = convertquota.c convertquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) if WITH_RPC rpc_rquotad_SOURCES = \ rquota_server.c \ rquota_svc.c \ svc_socket.c rpc_rquotad_LDADD = \ libquota.a \ $(INTLLIBS) \ $(WRAP_LIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) endif quota_nld_SOURCES = quota_nld.c quota_nld_CFLAGS = \ $(AM_CFLAGS) \ $(DBUS_CFLAGS) \ $(LIBNL3_CFLAGS) quota_nld_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) \ $(DBUS_LIBS) \ $(LIBNL3_LIBS) if WITH_RPC # ------------------ # Rpcgen conversions # ------------------ %.h: %.x @rm -f $@ @$(RPCGEN) -h -o $@ $^ %.c: %.x @rm -f $@ @$(RPCGEN) -c -o $@ $^ rquota_clnt.c: rquota.x @rm -f $@ @$(RPCGEN) -l -o $@ $< endif # -------- # Quotaoff # -------- install-exec-hook: rm -f $(DESTDIR)$(sbindir)/quotaoff @$(LN_S) quotaon $(DESTDIR)$(sbindir)/quotaoff install-data-hook: rm -f $(DESTDIR)$(mandir)/man8/quotaoff.8 @$(LN_S) quotaon.8 $(DESTDIR)$(mandir)/man8/quotaoff.8 # ------------- # Extra options # ------------- distclean-local: rm -rf *.cache *~ quota-4.09/Makefile.in000066400000000000000000002210671446321055100146550ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @WITH_NETLINK_TRUE@am__append_1 = quota_nld.8 @WITH_NETLINK_FALSE@am__append_2 = quota_nld.8 @WITH_RPC_TRUE@am__append_3 = \ @WITH_RPC_TRUE@ rpc.rquotad.8 \ @WITH_RPC_TRUE@ rquota.3 @WITH_RPC_FALSE@am__append_4 = \ @WITH_RPC_FALSE@ rpc.rquotad.8 \ @WITH_RPC_FALSE@ rquota.3 @WITH_RPC_TRUE@am__append_5 = $(TIRPC_CFLAGS) @WITH_RPC_TRUE@am__append_6 = librpcclient.a bin_PROGRAMS = quota$(EXEEXT) quotasync$(EXEEXT) sbin_PROGRAMS = quotacheck$(EXEEXT) quotaon$(EXEEXT) repquota$(EXEEXT) \ warnquota$(EXEEXT) quotastats$(EXEEXT) xqmstats$(EXEEXT) \ edquota$(EXEEXT) setquota$(EXEEXT) convertquota$(EXEEXT) \ $(am__EXEEXT_1) $(am__EXEEXT_2) @WITH_RPC_TRUE@am__append_7 = \ @WITH_RPC_TRUE@ rpc.rquotad @WITH_NETLINK_TRUE@am__append_8 = \ @WITH_NETLINK_TRUE@ quota_nld subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libquota_a_AR = $(AR) $(ARFLAGS) libquota_a_DEPENDENCIES = $(RPCLIBS) am_libquota_a_OBJECTS = quotaio.$(OBJEXT) quotaio_v1.$(OBJEXT) \ quotaio_v2.$(OBJEXT) quotaio_tree.$(OBJEXT) \ quotaio_rpc.$(OBJEXT) quotaio_xfs.$(OBJEXT) \ quotaio_meta.$(OBJEXT) quotaio_generic.$(OBJEXT) \ bylabel.$(OBJEXT) common.$(OBJEXT) quotasys.$(OBJEXT) \ pot.$(OBJEXT) libquota_a_OBJECTS = $(am_libquota_a_OBJECTS) librpcclient_a_AR = $(AR) $(ARFLAGS) librpcclient_a_LIBADD = am__librpcclient_a_SOURCES_DIST = rquota.c rquota.h rquota_client.c \ rquota_client.h rquota_clnt.c @WITH_RPC_TRUE@am_librpcclient_a_OBJECTS = \ @WITH_RPC_TRUE@ librpcclient_a-rquota.$(OBJEXT) \ @WITH_RPC_TRUE@ librpcclient_a-rquota_client.$(OBJEXT) \ @WITH_RPC_TRUE@ librpcclient_a-rquota_clnt.$(OBJEXT) librpcclient_a_OBJECTS = $(am_librpcclient_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" \ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" \ "$(DESTDIR)$(docdir)" "$(DESTDIR)$(rpcsvcdir)" \ "$(DESTDIR)$(sysconfdir)" @WITH_RPC_TRUE@am__EXEEXT_1 = rpc.rquotad$(EXEEXT) @WITH_NETLINK_TRUE@am__EXEEXT_2 = quota_nld$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS) am_convertquota_OBJECTS = convertquota.$(OBJEXT) convertquota_OBJECTS = $(am_convertquota_OBJECTS) am__DEPENDENCIES_1 = convertquota_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) \ $(RPCLIBS) $(am__DEPENDENCIES_1) am_edquota_OBJECTS = edquota.$(OBJEXT) quotaops.$(OBJEXT) edquota_OBJECTS = $(am_edquota_OBJECTS) edquota_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) $(RPCLIBS) \ $(am__DEPENDENCIES_1) am_quota_OBJECTS = quota.$(OBJEXT) quotaops.$(OBJEXT) quota_OBJECTS = $(am_quota_OBJECTS) quota_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) $(RPCLIBS) \ $(am__DEPENDENCIES_1) am_quota_nld_OBJECTS = quota_nld-quota_nld.$(OBJEXT) quota_nld_OBJECTS = $(am_quota_nld_OBJECTS) quota_nld_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) $(RPCLIBS) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) quota_nld_LINK = $(CCLD) $(quota_nld_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_quotacheck_OBJECTS = quotacheck-quotacheck.$(OBJEXT) \ quotacheck-quotacheck_v1.$(OBJEXT) \ quotacheck-quotacheck_v2.$(OBJEXT) \ quotacheck-quotaops.$(OBJEXT) quotacheck_OBJECTS = $(am_quotacheck_OBJECTS) quotacheck_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(RPCLIBS) \ $(am__DEPENDENCIES_1) quotacheck_LINK = $(CCLD) $(quotacheck_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_quotaon_OBJECTS = quotaon.$(OBJEXT) quotaon_xfs.$(OBJEXT) quotaon_OBJECTS = $(am_quotaon_OBJECTS) quotaon_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) $(RPCLIBS) \ $(am__DEPENDENCIES_1) am_quotastats_OBJECTS = quotastats.$(OBJEXT) common.$(OBJEXT) \ pot.$(OBJEXT) quotastats_OBJECTS = $(am_quotastats_OBJECTS) quotastats_DEPENDENCIES = $(am__DEPENDENCIES_1) am_quotasync_OBJECTS = quotasync.$(OBJEXT) quotasync_OBJECTS = $(am_quotasync_OBJECTS) quotasync_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) $(RPCLIBS) \ $(am__DEPENDENCIES_1) am_repquota_OBJECTS = repquota.$(OBJEXT) repquota_OBJECTS = $(am_repquota_OBJECTS) repquota_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) $(RPCLIBS) \ $(am__DEPENDENCIES_1) am__rpc_rquotad_SOURCES_DIST = rquota_server.c rquota_svc.c \ svc_socket.c @WITH_RPC_TRUE@am_rpc_rquotad_OBJECTS = rquota_server.$(OBJEXT) \ @WITH_RPC_TRUE@ rquota_svc.$(OBJEXT) svc_socket.$(OBJEXT) rpc_rquotad_OBJECTS = $(am_rpc_rquotad_OBJECTS) @WITH_RPC_TRUE@rpc_rquotad_DEPENDENCIES = libquota.a \ @WITH_RPC_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ @WITH_RPC_TRUE@ $(RPCLIBS) $(am__DEPENDENCIES_1) am_setquota_OBJECTS = setquota.$(OBJEXT) quotaops.$(OBJEXT) setquota_OBJECTS = $(am_setquota_OBJECTS) setquota_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) $(RPCLIBS) \ $(am__DEPENDENCIES_1) am_warnquota_OBJECTS = warnquota.$(OBJEXT) warnquota_OBJECTS = $(am_warnquota_OBJECTS) warnquota_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(RPCLIBS) $(am__DEPENDENCIES_1) am_xqmstats_OBJECTS = xqmstats.$(OBJEXT) common.$(OBJEXT) \ pot.$(OBJEXT) xqmstats_OBJECTS = $(am_xqmstats_OBJECTS) xqmstats_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libquota_a_SOURCES) $(librpcclient_a_SOURCES) \ $(convertquota_SOURCES) $(edquota_SOURCES) $(quota_SOURCES) \ $(quota_nld_SOURCES) $(quotacheck_SOURCES) $(quotaon_SOURCES) \ $(quotastats_SOURCES) $(quotasync_SOURCES) $(repquota_SOURCES) \ $(rpc_rquotad_SOURCES) $(setquota_SOURCES) \ $(warnquota_SOURCES) $(xqmstats_SOURCES) DIST_SOURCES = $(libquota_a_SOURCES) \ $(am__librpcclient_a_SOURCES_DIST) $(convertquota_SOURCES) \ $(edquota_SOURCES) $(quota_SOURCES) $(quota_nld_SOURCES) \ $(quotacheck_SOURCES) $(quotaon_SOURCES) $(quotastats_SOURCES) \ $(quotasync_SOURCES) $(repquota_SOURCES) \ $(am__rpc_rquotad_SOURCES_DIST) $(setquota_SOURCES) \ $(warnquota_SOURCES) $(xqmstats_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 man3dir = $(mandir)/man3 man5dir = $(mandir)/man5 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(doc_DATA) $(rpcsvc_DATA) $(sysconf_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ ABOUT-NLS COPYING ar-lib compile config.guess config.rpath \ config.sub depcomp install-sh missing mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) 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" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).tar.xz GZIP_ENV = --best DIST_TARGETS = dist-xz dist-bzip2 dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COM_ERR_CFLAGS = @COM_ERR_CFLAGS@ COM_ERR_LIBS = @COM_ERR_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXT2FS_CFLAGS = @EXT2FS_CFLAGS@ EXT2FS_LIBS = @EXT2FS_LIBS@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ LDAP_LIBS = @LDAP_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBNL3_CFLAGS = @LIBNL3_CFLAGS@ LIBNL3_LIBS = @LIBNL3_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ 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_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ RANLIB = @RANLIB@ RPCGEN = @RPCGEN@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIRPC_CFLAGS = @TIRPC_CFLAGS@ TIRPC_LIBS = @TIRPC_LIBS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WRAP_LIBS = @WRAP_LIBS@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 AM_LDFLAGS = @PIE_LDFLAGS@ AM_CFLAGS = -fPIC @WARN_CFLAGS@ $(am__append_5) doc_DATA = \ README.mailserver \ README.ldap-support \ set_limits_example.c \ doc/quotadoc.sgml sysconf_DATA = \ warnquota.conf \ quotatab \ quotagrpadmins man_MANS = convertquota.8 edquota.8 quotagrpadmins.5 quotacheck.8 \ quotaon.8 quotastats.8 quotasync.1 quotatab.5 quota.1 \ repquota.8 setquota.8 warnquota.conf.5 warnquota.8 xqmstats.8 \ $(am__append_1) $(am__append_3) dist_MANS = $(am__append_2) $(am__append_4) $(man_MANS) SUBDIRS = po EXTRA_DIST = \ $(sysconf_DATA) \ $(doc_DATA) \ $(dist_MANS) \ $(rpcsvc_DATA) \ autogen.sh \ Changelog \ ldap-scripts noinst_LIBRARIES = libquota.a $(am__append_6) @WITH_RPC_TRUE@rpcsvcdir = $(includedir)/rpcsvc @WITH_RPC_TRUE@rpcsvc_DATA = \ @WITH_RPC_TRUE@ rquota.h \ @WITH_RPC_TRUE@ rquota.x @WITH_RPC_TRUE@librpcclient_a_SOURCES = \ @WITH_RPC_TRUE@ rquota.c \ @WITH_RPC_TRUE@ rquota.h \ @WITH_RPC_TRUE@ rquota_client.c \ @WITH_RPC_TRUE@ rquota_client.h \ @WITH_RPC_TRUE@ rquota_clnt.c @WITH_RPC_TRUE@librpcclient_a_CFLAGS = $(AM_CFLAGS) -Wno-unused @WITH_RPC_TRUE@RPCLIBS = librpcclient.a @WITH_RPC_TRUE@BUILT_SOURCES = rquota.h rquota.c rquota_clnt.c @WITH_RPC_TRUE@CLEANFILES = rquota.c rquota.h rquota_clnt.c libquota_a_SOURCES = \ dqblk_rpc.h \ dqblk_v1.h \ dqblk_v2.h \ dqblk_xfs.h \ quotaio.c \ quotaio.h \ quotaio_v1.c \ quotaio_v1.h \ quotaio_v2.c \ quotaio_v2.h \ quotaio_tree.c \ quotaio_rpc.c \ quotaio_xfs.c \ quotaio_xfs.h \ quotaio_meta.c \ quotaio_generic.c \ quotaio_generic.h \ bylabel.c \ bylabel.h \ common.c \ config.h \ common.h \ quotasys.c \ quotasys.h \ mntopt.h \ pot.c \ pot.h libquota_a_LIBADD = \ $(RPCLIBS) quotaon_SOURCES = \ quotaon.c \ quotaon.h \ quotaon_xfs.c quotaon_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) quotacheck_SOURCES = \ quotacheck.c \ quotacheck.h \ quotacheck_v1.c \ quotacheck_v2.c \ quota_tree.h \ quotaops.c quotacheck_CFLAGS = \ $(AM_CFLAGS) \ $(EXT2FS_CFLAGS) \ $(COM_ERR_CFLAGS) quotacheck_LDADD = \ libquota.a \ $(EXT2FS_LIBS) \ $(COM_ERR_LIBS) \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) quota_SOURCES = \ quota.c \ quota.h \ quotaops.c \ quotaops.h quota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) quotasync_SOURCES = quotasync.c quotasync_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) repquota_SOURCES = repquota.c repquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) warnquota_SOURCES = warnquota.c warnquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(LDAP_LIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) quotastats_SOURCES = \ quotastats.c \ common.c \ common.h \ pot.c \ pot.h quotastats_LDADD = \ $(INTLLIBS) xqmstats_SOURCES = \ xqmstats.c \ common.c \ common.h \ pot.c \ pot.h xqmstats_LDADD = \ $(INTLLIBS) edquota_SOURCES = \ edquota.c \ quotaops.c \ quotaops.h edquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) setquota_SOURCES = \ setquota.c \ quotaops.c \ quotaops.h setquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) convertquota_SOURCES = convertquota.c convertquota_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) @WITH_RPC_TRUE@rpc_rquotad_SOURCES = \ @WITH_RPC_TRUE@ rquota_server.c \ @WITH_RPC_TRUE@ rquota_svc.c \ @WITH_RPC_TRUE@ svc_socket.c @WITH_RPC_TRUE@rpc_rquotad_LDADD = \ @WITH_RPC_TRUE@ libquota.a \ @WITH_RPC_TRUE@ $(INTLLIBS) \ @WITH_RPC_TRUE@ $(WRAP_LIBS) \ @WITH_RPC_TRUE@ $(RPCLIBS) \ @WITH_RPC_TRUE@ $(TIRPC_LIBS) quota_nld_SOURCES = quota_nld.c quota_nld_CFLAGS = \ $(AM_CFLAGS) \ $(DBUS_CFLAGS) \ $(LIBNL3_CFLAGS) quota_nld_LDADD = \ libquota.a \ $(INTLLIBS) \ $(RPCLIBS) \ $(TIRPC_LIBS) \ $(DBUS_LIBS) \ $(LIBNL3_LIBS) all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libquota.a: $(libquota_a_OBJECTS) $(libquota_a_DEPENDENCIES) $(EXTRA_libquota_a_DEPENDENCIES) $(AM_V_at)-rm -f libquota.a $(AM_V_AR)$(libquota_a_AR) libquota.a $(libquota_a_OBJECTS) $(libquota_a_LIBADD) $(AM_V_at)$(RANLIB) libquota.a librpcclient.a: $(librpcclient_a_OBJECTS) $(librpcclient_a_DEPENDENCIES) $(EXTRA_librpcclient_a_DEPENDENCIES) $(AM_V_at)-rm -f librpcclient.a $(AM_V_AR)$(librpcclient_a_AR) librpcclient.a $(librpcclient_a_OBJECTS) $(librpcclient_a_LIBADD) $(AM_V_at)$(RANLIB) librpcclient.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; 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) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; 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) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(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: -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) convertquota$(EXEEXT): $(convertquota_OBJECTS) $(convertquota_DEPENDENCIES) $(EXTRA_convertquota_DEPENDENCIES) @rm -f convertquota$(EXEEXT) $(AM_V_CCLD)$(LINK) $(convertquota_OBJECTS) $(convertquota_LDADD) $(LIBS) edquota$(EXEEXT): $(edquota_OBJECTS) $(edquota_DEPENDENCIES) $(EXTRA_edquota_DEPENDENCIES) @rm -f edquota$(EXEEXT) $(AM_V_CCLD)$(LINK) $(edquota_OBJECTS) $(edquota_LDADD) $(LIBS) quota$(EXEEXT): $(quota_OBJECTS) $(quota_DEPENDENCIES) $(EXTRA_quota_DEPENDENCIES) @rm -f quota$(EXEEXT) $(AM_V_CCLD)$(LINK) $(quota_OBJECTS) $(quota_LDADD) $(LIBS) quota_nld$(EXEEXT): $(quota_nld_OBJECTS) $(quota_nld_DEPENDENCIES) $(EXTRA_quota_nld_DEPENDENCIES) @rm -f quota_nld$(EXEEXT) $(AM_V_CCLD)$(quota_nld_LINK) $(quota_nld_OBJECTS) $(quota_nld_LDADD) $(LIBS) quotacheck$(EXEEXT): $(quotacheck_OBJECTS) $(quotacheck_DEPENDENCIES) $(EXTRA_quotacheck_DEPENDENCIES) @rm -f quotacheck$(EXEEXT) $(AM_V_CCLD)$(quotacheck_LINK) $(quotacheck_OBJECTS) $(quotacheck_LDADD) $(LIBS) quotaon$(EXEEXT): $(quotaon_OBJECTS) $(quotaon_DEPENDENCIES) $(EXTRA_quotaon_DEPENDENCIES) @rm -f quotaon$(EXEEXT) $(AM_V_CCLD)$(LINK) $(quotaon_OBJECTS) $(quotaon_LDADD) $(LIBS) quotastats$(EXEEXT): $(quotastats_OBJECTS) $(quotastats_DEPENDENCIES) $(EXTRA_quotastats_DEPENDENCIES) @rm -f quotastats$(EXEEXT) $(AM_V_CCLD)$(LINK) $(quotastats_OBJECTS) $(quotastats_LDADD) $(LIBS) quotasync$(EXEEXT): $(quotasync_OBJECTS) $(quotasync_DEPENDENCIES) $(EXTRA_quotasync_DEPENDENCIES) @rm -f quotasync$(EXEEXT) $(AM_V_CCLD)$(LINK) $(quotasync_OBJECTS) $(quotasync_LDADD) $(LIBS) repquota$(EXEEXT): $(repquota_OBJECTS) $(repquota_DEPENDENCIES) $(EXTRA_repquota_DEPENDENCIES) @rm -f repquota$(EXEEXT) $(AM_V_CCLD)$(LINK) $(repquota_OBJECTS) $(repquota_LDADD) $(LIBS) rpc.rquotad$(EXEEXT): $(rpc_rquotad_OBJECTS) $(rpc_rquotad_DEPENDENCIES) $(EXTRA_rpc_rquotad_DEPENDENCIES) @rm -f rpc.rquotad$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rpc_rquotad_OBJECTS) $(rpc_rquotad_LDADD) $(LIBS) setquota$(EXEEXT): $(setquota_OBJECTS) $(setquota_DEPENDENCIES) $(EXTRA_setquota_DEPENDENCIES) @rm -f setquota$(EXEEXT) $(AM_V_CCLD)$(LINK) $(setquota_OBJECTS) $(setquota_LDADD) $(LIBS) warnquota$(EXEEXT): $(warnquota_OBJECTS) $(warnquota_DEPENDENCIES) $(EXTRA_warnquota_DEPENDENCIES) @rm -f warnquota$(EXEEXT) $(AM_V_CCLD)$(LINK) $(warnquota_OBJECTS) $(warnquota_LDADD) $(LIBS) xqmstats$(EXEEXT): $(xqmstats_OBJECTS) $(xqmstats_DEPENDENCIES) $(EXTRA_xqmstats_DEPENDENCIES) @rm -f xqmstats$(EXEEXT) $(AM_V_CCLD)$(LINK) $(xqmstats_OBJECTS) $(xqmstats_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bylabel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertquota.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edquota.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librpcclient_a-rquota.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librpcclient_a-rquota_client.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librpcclient_a-rquota_clnt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quota.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quota_nld-quota_nld.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotacheck-quotacheck.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotacheck-quotacheck_v1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotacheck-quotacheck_v2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotacheck-quotaops.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaio_generic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaio_meta.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaio_rpc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaio_tree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaio_v1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaio_v2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaio_xfs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaon_xfs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotaops.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotastats.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotasync.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotasys.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repquota.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rquota_server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rquota_svc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setquota.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svc_socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warnquota.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xqmstats.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` librpcclient_a-rquota.o: rquota.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -MT librpcclient_a-rquota.o -MD -MP -MF $(DEPDIR)/librpcclient_a-rquota.Tpo -c -o librpcclient_a-rquota.o `test -f 'rquota.c' || echo '$(srcdir)/'`rquota.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librpcclient_a-rquota.Tpo $(DEPDIR)/librpcclient_a-rquota.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rquota.c' object='librpcclient_a-rquota.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -c -o librpcclient_a-rquota.o `test -f 'rquota.c' || echo '$(srcdir)/'`rquota.c librpcclient_a-rquota.obj: rquota.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -MT librpcclient_a-rquota.obj -MD -MP -MF $(DEPDIR)/librpcclient_a-rquota.Tpo -c -o librpcclient_a-rquota.obj `if test -f 'rquota.c'; then $(CYGPATH_W) 'rquota.c'; else $(CYGPATH_W) '$(srcdir)/rquota.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librpcclient_a-rquota.Tpo $(DEPDIR)/librpcclient_a-rquota.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rquota.c' object='librpcclient_a-rquota.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -c -o librpcclient_a-rquota.obj `if test -f 'rquota.c'; then $(CYGPATH_W) 'rquota.c'; else $(CYGPATH_W) '$(srcdir)/rquota.c'; fi` librpcclient_a-rquota_client.o: rquota_client.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -MT librpcclient_a-rquota_client.o -MD -MP -MF $(DEPDIR)/librpcclient_a-rquota_client.Tpo -c -o librpcclient_a-rquota_client.o `test -f 'rquota_client.c' || echo '$(srcdir)/'`rquota_client.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librpcclient_a-rquota_client.Tpo $(DEPDIR)/librpcclient_a-rquota_client.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rquota_client.c' object='librpcclient_a-rquota_client.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -c -o librpcclient_a-rquota_client.o `test -f 'rquota_client.c' || echo '$(srcdir)/'`rquota_client.c librpcclient_a-rquota_client.obj: rquota_client.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -MT librpcclient_a-rquota_client.obj -MD -MP -MF $(DEPDIR)/librpcclient_a-rquota_client.Tpo -c -o librpcclient_a-rquota_client.obj `if test -f 'rquota_client.c'; then $(CYGPATH_W) 'rquota_client.c'; else $(CYGPATH_W) '$(srcdir)/rquota_client.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librpcclient_a-rquota_client.Tpo $(DEPDIR)/librpcclient_a-rquota_client.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rquota_client.c' object='librpcclient_a-rquota_client.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -c -o librpcclient_a-rquota_client.obj `if test -f 'rquota_client.c'; then $(CYGPATH_W) 'rquota_client.c'; else $(CYGPATH_W) '$(srcdir)/rquota_client.c'; fi` librpcclient_a-rquota_clnt.o: rquota_clnt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -MT librpcclient_a-rquota_clnt.o -MD -MP -MF $(DEPDIR)/librpcclient_a-rquota_clnt.Tpo -c -o librpcclient_a-rquota_clnt.o `test -f 'rquota_clnt.c' || echo '$(srcdir)/'`rquota_clnt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librpcclient_a-rquota_clnt.Tpo $(DEPDIR)/librpcclient_a-rquota_clnt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rquota_clnt.c' object='librpcclient_a-rquota_clnt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -c -o librpcclient_a-rquota_clnt.o `test -f 'rquota_clnt.c' || echo '$(srcdir)/'`rquota_clnt.c librpcclient_a-rquota_clnt.obj: rquota_clnt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -MT librpcclient_a-rquota_clnt.obj -MD -MP -MF $(DEPDIR)/librpcclient_a-rquota_clnt.Tpo -c -o librpcclient_a-rquota_clnt.obj `if test -f 'rquota_clnt.c'; then $(CYGPATH_W) 'rquota_clnt.c'; else $(CYGPATH_W) '$(srcdir)/rquota_clnt.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librpcclient_a-rquota_clnt.Tpo $(DEPDIR)/librpcclient_a-rquota_clnt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rquota_clnt.c' object='librpcclient_a-rquota_clnt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librpcclient_a_CFLAGS) $(CFLAGS) -c -o librpcclient_a-rquota_clnt.obj `if test -f 'rquota_clnt.c'; then $(CYGPATH_W) 'rquota_clnt.c'; else $(CYGPATH_W) '$(srcdir)/rquota_clnt.c'; fi` quota_nld-quota_nld.o: quota_nld.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quota_nld_CFLAGS) $(CFLAGS) -MT quota_nld-quota_nld.o -MD -MP -MF $(DEPDIR)/quota_nld-quota_nld.Tpo -c -o quota_nld-quota_nld.o `test -f 'quota_nld.c' || echo '$(srcdir)/'`quota_nld.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quota_nld-quota_nld.Tpo $(DEPDIR)/quota_nld-quota_nld.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quota_nld.c' object='quota_nld-quota_nld.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quota_nld_CFLAGS) $(CFLAGS) -c -o quota_nld-quota_nld.o `test -f 'quota_nld.c' || echo '$(srcdir)/'`quota_nld.c quota_nld-quota_nld.obj: quota_nld.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quota_nld_CFLAGS) $(CFLAGS) -MT quota_nld-quota_nld.obj -MD -MP -MF $(DEPDIR)/quota_nld-quota_nld.Tpo -c -o quota_nld-quota_nld.obj `if test -f 'quota_nld.c'; then $(CYGPATH_W) 'quota_nld.c'; else $(CYGPATH_W) '$(srcdir)/quota_nld.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quota_nld-quota_nld.Tpo $(DEPDIR)/quota_nld-quota_nld.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quota_nld.c' object='quota_nld-quota_nld.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quota_nld_CFLAGS) $(CFLAGS) -c -o quota_nld-quota_nld.obj `if test -f 'quota_nld.c'; then $(CYGPATH_W) 'quota_nld.c'; else $(CYGPATH_W) '$(srcdir)/quota_nld.c'; fi` quotacheck-quotacheck.o: quotacheck.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -MT quotacheck-quotacheck.o -MD -MP -MF $(DEPDIR)/quotacheck-quotacheck.Tpo -c -o quotacheck-quotacheck.o `test -f 'quotacheck.c' || echo '$(srcdir)/'`quotacheck.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quotacheck-quotacheck.Tpo $(DEPDIR)/quotacheck-quotacheck.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotacheck.c' object='quotacheck-quotacheck.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -c -o quotacheck-quotacheck.o `test -f 'quotacheck.c' || echo '$(srcdir)/'`quotacheck.c quotacheck-quotacheck.obj: quotacheck.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -MT quotacheck-quotacheck.obj -MD -MP -MF $(DEPDIR)/quotacheck-quotacheck.Tpo -c -o quotacheck-quotacheck.obj `if test -f 'quotacheck.c'; then $(CYGPATH_W) 'quotacheck.c'; else $(CYGPATH_W) '$(srcdir)/quotacheck.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quotacheck-quotacheck.Tpo $(DEPDIR)/quotacheck-quotacheck.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotacheck.c' object='quotacheck-quotacheck.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -c -o quotacheck-quotacheck.obj `if test -f 'quotacheck.c'; then $(CYGPATH_W) 'quotacheck.c'; else $(CYGPATH_W) '$(srcdir)/quotacheck.c'; fi` quotacheck-quotacheck_v1.o: quotacheck_v1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -MT quotacheck-quotacheck_v1.o -MD -MP -MF $(DEPDIR)/quotacheck-quotacheck_v1.Tpo -c -o quotacheck-quotacheck_v1.o `test -f 'quotacheck_v1.c' || echo '$(srcdir)/'`quotacheck_v1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quotacheck-quotacheck_v1.Tpo $(DEPDIR)/quotacheck-quotacheck_v1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotacheck_v1.c' object='quotacheck-quotacheck_v1.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -c -o quotacheck-quotacheck_v1.o `test -f 'quotacheck_v1.c' || echo '$(srcdir)/'`quotacheck_v1.c quotacheck-quotacheck_v1.obj: quotacheck_v1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -MT quotacheck-quotacheck_v1.obj -MD -MP -MF $(DEPDIR)/quotacheck-quotacheck_v1.Tpo -c -o quotacheck-quotacheck_v1.obj `if test -f 'quotacheck_v1.c'; then $(CYGPATH_W) 'quotacheck_v1.c'; else $(CYGPATH_W) '$(srcdir)/quotacheck_v1.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quotacheck-quotacheck_v1.Tpo $(DEPDIR)/quotacheck-quotacheck_v1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotacheck_v1.c' object='quotacheck-quotacheck_v1.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -c -o quotacheck-quotacheck_v1.obj `if test -f 'quotacheck_v1.c'; then $(CYGPATH_W) 'quotacheck_v1.c'; else $(CYGPATH_W) '$(srcdir)/quotacheck_v1.c'; fi` quotacheck-quotacheck_v2.o: quotacheck_v2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -MT quotacheck-quotacheck_v2.o -MD -MP -MF $(DEPDIR)/quotacheck-quotacheck_v2.Tpo -c -o quotacheck-quotacheck_v2.o `test -f 'quotacheck_v2.c' || echo '$(srcdir)/'`quotacheck_v2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quotacheck-quotacheck_v2.Tpo $(DEPDIR)/quotacheck-quotacheck_v2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotacheck_v2.c' object='quotacheck-quotacheck_v2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -c -o quotacheck-quotacheck_v2.o `test -f 'quotacheck_v2.c' || echo '$(srcdir)/'`quotacheck_v2.c quotacheck-quotacheck_v2.obj: quotacheck_v2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -MT quotacheck-quotacheck_v2.obj -MD -MP -MF $(DEPDIR)/quotacheck-quotacheck_v2.Tpo -c -o quotacheck-quotacheck_v2.obj `if test -f 'quotacheck_v2.c'; then $(CYGPATH_W) 'quotacheck_v2.c'; else $(CYGPATH_W) '$(srcdir)/quotacheck_v2.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quotacheck-quotacheck_v2.Tpo $(DEPDIR)/quotacheck-quotacheck_v2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotacheck_v2.c' object='quotacheck-quotacheck_v2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -c -o quotacheck-quotacheck_v2.obj `if test -f 'quotacheck_v2.c'; then $(CYGPATH_W) 'quotacheck_v2.c'; else $(CYGPATH_W) '$(srcdir)/quotacheck_v2.c'; fi` quotacheck-quotaops.o: quotaops.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -MT quotacheck-quotaops.o -MD -MP -MF $(DEPDIR)/quotacheck-quotaops.Tpo -c -o quotacheck-quotaops.o `test -f 'quotaops.c' || echo '$(srcdir)/'`quotaops.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quotacheck-quotaops.Tpo $(DEPDIR)/quotacheck-quotaops.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotaops.c' object='quotacheck-quotaops.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -c -o quotacheck-quotaops.o `test -f 'quotaops.c' || echo '$(srcdir)/'`quotaops.c quotacheck-quotaops.obj: quotaops.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -MT quotacheck-quotaops.obj -MD -MP -MF $(DEPDIR)/quotacheck-quotaops.Tpo -c -o quotacheck-quotaops.obj `if test -f 'quotaops.c'; then $(CYGPATH_W) 'quotaops.c'; else $(CYGPATH_W) '$(srcdir)/quotaops.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/quotacheck-quotaops.Tpo $(DEPDIR)/quotacheck-quotaops.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotaops.c' object='quotacheck-quotaops.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(quotacheck_CFLAGS) $(CFLAGS) -c -o quotacheck-quotaops.obj `if test -f 'quotaops.c'; then $(CYGPATH_W) 'quotaops.c'; else $(CYGPATH_W) '$(srcdir)/quotaops.c'; fi` install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | 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,^[^1][0-9a-z]*$$,1,;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)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$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)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man3: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man3dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.3[a-z]*$$/p'; \ fi; \ } | 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,.,'`; \ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) install-man5: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man5dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.5[a-z]*$$/p'; \ fi; \ } | 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,.,'`; \ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) install-man8: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man8dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.8[a-z]*$$/p'; \ fi; \ } | 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,.,'`; \ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_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|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-rpcsvcDATA: $(rpcsvc_DATA) @$(NORMAL_INSTALL) @list='$(rpcsvc_DATA)'; test -n "$(rpcsvcdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(rpcsvcdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(rpcsvcdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(rpcsvcdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(rpcsvcdir)" || exit $$?; \ done uninstall-rpcsvcDATA: @$(NORMAL_UNINSTALL) @list='$(rpcsvc_DATA)'; test -n "$(rpcsvcdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(rpcsvcdir)'; $(am__uninstall_files_from_dir) install-sysconfDATA: $(sysconf_DATA) @$(NORMAL_INSTALL) @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_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|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(rpcsvcdir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -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 "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ clean-sbinPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-docDATA install-man install-rpcsvcDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-sbinPROGRAMS \ install-sysconfDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-man3 install-man5 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 -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-docDATA uninstall-man \ uninstall-rpcsvcDATA uninstall-sbinPROGRAMS \ uninstall-sysconfDATA uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \ uninstall-man8 .MAKE: $(am__recursive_targets) all check install install-am \ install-data-am install-exec-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-binPROGRAMS \ clean-cscope clean-generic clean-noinstLIBRARIES \ clean-sbinPROGRAMS cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-local distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-data-hook install-docDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-exec-hook install-html install-html-am install-info \ install-info-am install-man install-man1 install-man3 \ install-man5 install-man8 install-pdf install-pdf-am \ install-ps install-ps-am install-rpcsvcDATA \ install-sbinPROGRAMS install-strip install-sysconfDATA \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-docDATA uninstall-man uninstall-man1 uninstall-man3 \ uninstall-man5 uninstall-man8 uninstall-rpcsvcDATA \ uninstall-sbinPROGRAMS uninstall-sysconfDATA .PRECIOUS: Makefile # ------------------ # Rpcgen conversions # ------------------ @WITH_RPC_TRUE@%.h: %.x @WITH_RPC_TRUE@ @rm -f $@ @WITH_RPC_TRUE@ @$(RPCGEN) -h -o $@ $^ @WITH_RPC_TRUE@%.c: %.x @WITH_RPC_TRUE@ @rm -f $@ @WITH_RPC_TRUE@ @$(RPCGEN) -c -o $@ $^ @WITH_RPC_TRUE@rquota_clnt.c: rquota.x @WITH_RPC_TRUE@ @rm -f $@ @WITH_RPC_TRUE@ @$(RPCGEN) -l -o $@ $< # -------- # Quotaoff # -------- install-exec-hook: rm -f $(DESTDIR)$(sbindir)/quotaoff @$(LN_S) quotaon $(DESTDIR)$(sbindir)/quotaoff install-data-hook: rm -f $(DESTDIR)$(mandir)/man8/quotaoff.8 @$(LN_S) quotaon.8 $(DESTDIR)$(mandir)/man8/quotaoff.8 # ------------- # Extra options # ------------- distclean-local: rm -rf *.cache *~ # 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: quota-4.09/README.ldap-support000066400000000000000000000025441446321055100161160ustar00rootroot00000000000000LDAP support for warnquota by James Bourne The LDAP support added to warnquota allows you to retreive mail routing information from an LDAP server so that you can send mail to the correct addresses. So for example if usera has the email address usera@foo.bar.com and userb has userb@baz.bar.com you can have the attributes as follows (obvious things missing here): dn: uid=usera,ou=People,dc=bar,dc=com uid: usera mail: usera@foo.bar.com dn: uid=userb,ou=People,dc=bar,dc=com uid: userb mail: userb@baz.bar.com warnquota.conf should be set like this (if you allow anonymous binds and reads of the mail attribute: LDAP_MAIL = true LDAP_HOST = ldap.bar.com LDAP_PORT = 389 LDAP_BASEDN = ou=People,dc=bar,dc=com LDAP_SEARCH_ATTRIBUTE = uid LDAP_MAIL_ATTRIBUTE = mail LDAP_DEFAULT_MAIL_DOMAIN = bar.com If not, just add: LDAP_BINDDN = uid=readonly,dc=bar,dc=com LDAP_BINDPW = it'sapasswd and you will bind as the user readonly and search that way. If you need to do lookups using a different attribute (Novell eDir for example uses cn=username) change the LDAP_SEARCH_ATTRIBUTE to cn. Same with LDAP_MAIL_ATTRIBUTE. If you use mail routing in LDAP (roughly following the Laser Draft) you can set this to mailLocalAddress and warnquota will send to that address. This will guarentee that your quota mail will be delivered to the correct address. quota-4.09/README.mailserver000066400000000000000000000011551446321055100156320ustar00rootroot00000000000000Mail server support by James Bourne If you are running warnquota on a mail server you need to be able to tell warnquota not to send mail when the users quota is either over the hard limit or past the grace period. So, to do this add the value: MAILDEV = any into /etc/warnquota.conf and warnquota will not send mail to those users. If you have only a single partition you wish to apply this rule to, use the device name as the argument to the MAILSERV configuration variable list this: MAILDEV = /dev/sdb1 Please note that specifying checking of mail device may slow down things considerably... quota-4.09/aclocal.m4000066400000000000000000001525121446321055100144460ustar00rootroot00000000000000# generated automatically by aclocal 1.15.1 -*- Autoconf -*- # Copyright (C) 1996-2017 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_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. 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 -*- # serial 12 (pkg-config-0.29.2) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) 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 ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have 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_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. 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` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. 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 ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl 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 $2]) _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 AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [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])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [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 .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # Copyright (C) 2002-2017 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.15' 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.15.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.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2017 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_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # 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__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 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], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 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_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$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-2017 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. # 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", "OBJC", "OBJCXX", "UPC", or "GJC". # 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 m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" 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". rm -rf conftest.dir 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 10 /bin/sh. echo '/* dummy */' > 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 ;; msvc7 | msvc7msys | 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], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2017 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_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf 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"` # 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'`; 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-2017 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 macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # 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.65])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], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) 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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [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([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). 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])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) 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-2017 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+set}" != 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-2017 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. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2017 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_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 ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2017 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_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 is modern enough. # If it is, 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 --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2017 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_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])]) # Copyright (C) 1999-2017 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_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2017 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_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2017 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_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2017 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_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2017 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-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # 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-2017 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_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. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} 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/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/nls.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) quota-4.09/ar-lib000077500000000000000000000133021446321055100136730ustar00rootroot00000000000000#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2017 Free Software Foundation, Inc. # Written by Peter Rosin . # # 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 # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <. * * 1999-02-22 Arkadiusz Mikiewicz * - added Native Language Support * 2000-01-20 James Antill * - Added error message if /proc/partitions cannot be opened * 2000-05-09 Erik Troan * - Added cache for UUID and disk labels * 2000-11-07 Nathan Scott * - Added XFS support */ #include "config.h" #include #include #include #include #include #include #include #include "bylabel.h" #include "common.h" #include "pot.h" #define PROC_PARTITIONS "/proc/partitions" #define DEVLABELDIR "/dev" static struct uuidCache_s { struct uuidCache_s *next; char uuid[16]; char *label; char *device; } *uuidCache = NULL; #define EXT2_SUPER_MAGIC 0xEF53 struct ext2_super_block { uint8_t s_dummy1[56]; uint8_t s_magic[2]; uint8_t s_dummy2[46]; uint8_t s_uuid[16]; uint8_t s_volume_name[16]; }; #define ext2magic(s) ((uint32_t) s.s_magic[0] + (((uint32_t) s.s_magic[1]) << 8)) #define XFS_SUPER_MAGIC "XFSB" #define XFS_SUPER_MAGIC2 "BSFX" #define EXFS_SUPER_MAGIC "EXFS" struct xfs_super_block { uint8_t s_magic[4]; uint8_t s_dummy[28]; uint8_t s_uuid[16]; uint8_t s_dummy2[60]; uint8_t s_fsname[12]; }; #define REISER_SUPER_MAGIC "ReIsEr2Fs" struct reiserfs_super_block { uint8_t s_dummy1[52]; uint8_t s_magic[10]; uint8_t s_dummy2[22]; uint8_t s_uuid[16]; uint8_t s_volume_name[16]; }; #define F2FS_SUPER_MAGIC "0xF2F52010" struct f2fs_super_block { uint8_t s_magic[8]; uint8_t s_dummy[144]; uint8_t s_uuid[16]; uint8_t s_volume_name[512]; }; static inline unsigned short swapped(unsigned short a) { return (a >> 8) | (a << 8); } /* for now, only ext2 and xfs are supported */ static int get_label_uuid(const char *device, char **label, char *uuid) { /* start with ext2 and xfs tests, taken from mount_guess_fstype */ /* should merge these later */ int fd, rv = 1; size_t namesize; struct ext2_super_block e2sb; struct xfs_super_block xfsb; struct reiserfs_super_block reisersb; struct f2fs_super_block f2fssb; fd = open(device, O_RDONLY); if (fd < 0) return rv; if (lseek(fd, 1024, SEEK_SET) == 1024 && read(fd, (char *)&e2sb, sizeof(e2sb)) == sizeof(e2sb) && ext2magic(e2sb) == EXT2_SUPER_MAGIC) { memcpy(uuid, e2sb.s_uuid, sizeof(e2sb.s_uuid)); namesize = sizeof(e2sb.s_volume_name); *label = smalloc(namesize + 1); sstrncpy(*label, (char *)e2sb.s_volume_name, namesize); rv = 0; } else if (lseek(fd, 0, SEEK_SET) == 0 && read(fd, (char *)&xfsb, sizeof(xfsb)) == sizeof(xfsb) && (strncmp((char *)&xfsb.s_magic, XFS_SUPER_MAGIC, 4) == 0 || strncmp((char *)&xfsb.s_magic, XFS_SUPER_MAGIC2, 4) == 0 || strncmp((char *)&xfsb.s_magic, EXFS_SUPER_MAGIC, 4) == 0)) { memcpy(uuid, xfsb.s_uuid, sizeof(xfsb.s_uuid)); namesize = sizeof(xfsb.s_fsname); *label = smalloc(namesize + 1); sstrncpy(*label, (char *)xfsb.s_fsname, namesize); rv = 0; } else if (lseek(fd, 65536, SEEK_SET) == 65536 && read(fd, (char *)&reisersb, sizeof(reisersb)) == sizeof(reisersb) && !strncmp((char *)&reisersb.s_magic, REISER_SUPER_MAGIC, 9)) { memcpy(uuid, reisersb.s_uuid, sizeof(reisersb.s_uuid)); namesize = sizeof(reisersb.s_volume_name); *label = smalloc(namesize + 1); sstrncpy(*label, (char *)reisersb.s_volume_name, namesize); rv = 0; } else if (lseek(fd, 65536, SEEK_SET) == 65536 && read(fd, (char *)&f2fssb, sizeof(f2fssb)) == sizeof(f2fssb) && !strncmp((char *)&f2fssb.s_magic, F2FS_SUPER_MAGIC, 8)) { memcpy(uuid, f2fssb.s_uuid, sizeof(f2fssb.s_uuid)); namesize = sizeof(f2fssb.s_volume_name); *label = smalloc(namesize + 1); sstrncpy(*label, (char *)f2fssb.s_volume_name, namesize); rv = 0; } close(fd); return rv; } static void uuidcache_addentry(char *device, char *label, char *uuid) { struct uuidCache_s *last; if (!uuidCache) { last = uuidCache = smalloc(sizeof(*uuidCache)); } else { for (last = uuidCache; last->next; last = last->next); last->next = smalloc(sizeof(*uuidCache)); last = last->next; } last->next = NULL; last->device = device; last->label = label; memcpy(last->uuid, uuid, sizeof(last->uuid)); } static void uuidcache_init(void) { char line[100]; char *s; int ma, mi, sz; static char ptname[100]; FILE *procpt; char uuid[16], *label; char device[110]; int firstPass; int handleOnFirst; if (uuidCache) return; procpt = fopen(PROC_PARTITIONS, "r"); if (!procpt) return; for (firstPass = 1; firstPass >= 0; firstPass--) { fseek(procpt, 0, SEEK_SET); while (fgets(line, sizeof(line), procpt)) { if (sscanf(line, " %d %d %d %[^\n ]", &ma, &mi, &sz, ptname) != 4) continue; /* skip extended partitions (heuristic: size 1) */ if (sz == 1) continue; /* look only at md devices on first pass */ handleOnFirst = !strncmp(ptname, "md", 2); if (firstPass != handleOnFirst) continue; /* skip entire disk (minor 0, 64, ... on ide; 0, 16, ... on sd) */ /* heuristic: partition name ends in a digit */ for (s = ptname; *s; s++); if (isdigit(s[-1])) { /* * Note: this is a heuristic only - there is no reason * why these devices should live in /dev. * Perhaps this directory should be specifiable by option. * One might for example have /devlabel with links to /dev * for the devices that may be accessed in this way. * (This is useful, if the cdrom on /dev/hdc must not * be accessed.) */ snprintf(device, sizeof(device), "%s/%s", DEVLABELDIR, ptname); if (!get_label_uuid(device, &label, uuid)) uuidcache_addentry(sstrdup(device), label, uuid); } } } fclose(procpt); } #define UUID 1 #define VOL 2 static char *get_spec_by_x(int n, const char *t) { struct uuidCache_s *uc; uuidcache_init(); uc = uuidCache; while (uc) { switch (n) { case UUID: if (!memcmp(t, uc->uuid, sizeof(uc->uuid))) return sstrdup(uc->device); break; case VOL: if (!strcmp(t, uc->label)) return sstrdup(uc->device); break; } uc = uc->next; } return NULL; } static uint8_t fromhex(char c) { if (isdigit(c)) return (c - '0'); else if (islower(c)) return (c - 'a' + 10); else return (c - 'A' + 10); } static char *get_spec_by_uuid(const char *s) { uint8_t uuid[16]; int i; if (strlen(s) != 36 || s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-') goto bad_uuid; for (i = 0; i < 16; i++) { if (*s == '-') s++; if (!isxdigit(s[0]) || !isxdigit(s[1])) goto bad_uuid; uuid[i] = ((fromhex(s[0]) << 4) | fromhex(s[1])); s += 2; } return get_spec_by_x(UUID, (char *)uuid); bad_uuid: errstr(_("Found an invalid UUID: %s\n"), s); return NULL; } static char *get_spec_by_volume_label(const char *s) { return get_spec_by_x(VOL, s); } const char *get_device_name(const char *item) { const char *rc; if (!strncmp(item, "UUID=", 5)) rc = get_spec_by_uuid(item + 5); else if (!strncmp(item, "LABEL=", 6)) rc = get_spec_by_volume_label(item + 6); else rc = sstrdup(item); if (!rc) errstr(_("Error checking device name: %s\n"), item); return rc; } quota-4.09/bylabel.h000066400000000000000000000001551446321055100143640ustar00rootroot00000000000000#ifndef BYLABEL_H_ #define BYLABEL_H_ const char *get_device_name(const char *item); #endif /* BYLABEL_H_ */ quota-4.09/common.c000066400000000000000000000062501446321055100142370ustar00rootroot00000000000000/* * * Common things for all utilities * * Jan Kara - sponsored by SuSE CR * * Jani Jaakkola - syslog support */ #include "config.h" #include #include #include #include #include #include #include #include #include "pot.h" #include "common.h" static int enable_syslog=0; void use_syslog(void) { openlog(progname,0,LOG_DAEMON); enable_syslog=1; } static void do_syslog(int level, const char *format, va_list args) { char buf[1024]; int i, j; vsnprintf(buf,sizeof(buf),format,args); /* This while removes newlines from the log, so that * syslog() will be called once for every line */ for (i = 0; buf[i]; i = j) { for (j = i; buf[j] && buf[j] != '\n'; j++); if (buf[j] == '\n') buf[j++] = '\0'; syslog(level, "%s", buf + i); } } void die(int ret, char *fmtstr, ...) { va_list args; va_start(args, fmtstr); if (enable_syslog) { do_syslog(LOG_CRIT, fmtstr, args); syslog(LOG_CRIT, "Exiting with status %d", ret); } else { fprintf(stderr, "%s: ", progname); vfprintf(stderr, fmtstr, args); } va_end(args); exit(ret); } void errstrv(char *fmtstr, va_list args) { if (enable_syslog) do_syslog(LOG_ERR, fmtstr, args); else { fprintf(stderr, "%s: ", progname); vfprintf(stderr, fmtstr, args); } } void errstr(char *fmtstr, ...) { va_list args; va_start(args, fmtstr); errstrv(fmtstr, args); va_end(args); } void *smalloc(size_t size) { void *ret = malloc(size); if (!ret) { fputs("Not enough memory.\n", stderr); exit(3); } return ret; } void *srealloc(void *ptr, size_t size) { void *ret = realloc(ptr, size); if (!ret) { fputs("Not enough memory.\n", stderr); exit(3); } return ret; } void sstrncpy(char *d, const char *s, size_t len) { strncpy(d, s, len); d[len - 1] = 0; } void sstrncat(char *d, const char *s, size_t len) { strncat(d, s, len - 1); } char *sstrdup(const char *s) { char *r = strdup(s); if (!r) { puts("Not enough memory."); exit(3); } return r; } void version(void) { printf(_("Quota utilities version %s.\n"), PACKAGE_VERSION); printf(_("Compiled with:%s\n"), COMPILE_OPTS); printf(_("Bugs to %s\n"), PACKAGE_BUGREPORT); } int timespec_cmp(struct timespec *a, struct timespec *b) { if (a->tv_sec < b->tv_sec) return -1; if (a->tv_sec > b->tv_sec) return 1; if (a->tv_nsec < b->tv_nsec) return -1; if (a->tv_nsec > b->tv_nsec) return 1; return 0; } static enum s2s_unit unitstring2unit(char *opt) { char unitchar; char *unitstring = "kmgt"; int i, len; len = strlen(opt); if (!len) return S2S_NONE; if (len > 1) return S2S_INVALID; unitchar = tolower(*opt); for (i = 0; i < strlen(unitstring); i++) if (unitchar == unitstring[i]) break; if (i >= strlen(unitstring)) return S2S_INVALID; return S2S_KB + i; } int unitopt2unit(char *opt, enum s2s_unit *space_unit, enum s2s_unit *inode_unit) { char *sep; sep = strchr(opt, ','); if (!sep) return -1; *sep = 0; *space_unit = unitstring2unit(opt); if (*space_unit == S2S_INVALID) return -1; *inode_unit = unitstring2unit(sep + 1); if (*inode_unit == S2S_INVALID) return -1; return 0; } quota-4.09/common.h000066400000000000000000000030701446321055100142410ustar00rootroot00000000000000/* * * Various things common for all utilities * */ #ifndef GUARD_COMMON_H #define GUARD_COMMON_H #include #include #ifndef __attribute__ # if !defined __GNUC__ || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__ # define __attribute__(x) # endif #endif /* Name of current program for error reporting */ extern char *progname; /* Finish programs being */ void __attribute ((noreturn)) die(int, char *, ...) __attribute__ ((__format__ (__printf__, 2, 3))); /* Print error from va_list */ void errstrv(char *, va_list); /* Print an error */ void errstr(char *, ...) __attribute__ ((__format__ (__printf__, 1, 2))); /* If use_syslog is called, all error reports using errstr() and die() are * written to syslog instead of stderr */ void use_syslog(); /* malloc() with error check */ void *smalloc(size_t); /* realloc() with error check */ void *srealloc(void *, size_t); /* Safe strncpy - always finishes string */ void sstrncpy(char *, const char *, size_t); /* Safe strncat - always finishes string */ void sstrncat(char *, const char *, size_t); /* Safe version of strdup() */ char *sstrdup(const char *s); /* Print version string */ void version(void); /* Desired output unit */ enum s2s_unit { S2S_NONE = 0, S2S_KB, S2S_MB, S2S_GB, S2S_TB, S2S_AUTO, S2S_INVALID }; /* Compare two times */ int timespec_cmp(struct timespec *a, struct timespec *b); /* Convert command line option to desired output unit */ int unitopt2unit(char *opt, enum s2s_unit *space_unit, enum s2s_unit *inode_unit); #endif /* GUARD_COMMON_H */ quota-4.09/compile000077500000000000000000000163261446321055100141660ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 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 # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= 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'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= 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 $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= 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: "UTC0" # time-stamp-end: "; # UTC" # End: quota-4.09/config.guess000077500000000000000000001271301446321055100151240ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2017 Free Software Foundation, Inc. timestamp='2017-05-27' # 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 3 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, 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # 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 # # Please send patches to . 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 1992-2017 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_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac 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 tuples: *-*-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=`(uname -p 2>/dev/null || \ /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 ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-${VENDOR}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-${VENDOR}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in earm*) os=netbsdelf ;; 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 # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; 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/[-_].*//' | cut -d. -f1,2` ;; 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}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-${VENDOR}-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE} exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo ${UNAME_MACHINE_ARCH}-${VENDOR}-libertybsd${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 ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-${VENDOR}-sortix 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` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; 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:*:[4567]) 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/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` 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:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo ${UNAME_PROCESSOR}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys 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}-${LIBC}`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 "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} 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=gnulibc1 ; fi echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${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-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} 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-${LIBC}"; exit; } ;; mips64el:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; openrisc*:Linux:*:*) echo or1k-${VENDOR}-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-${VENDOR}-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-${VENDOR}-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-${VENDOR}-linux-${LIBC} ;; PA8*) echo hppa2.0-${VENDOR}-linux-${LIBC} ;; *) echo hppa-${VENDOR}-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-${VENDOR}-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-${VENDOR}-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-${VENDOR}-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-${VENDOR}-linux-${LIBC} exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} 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-${VENODR}-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 configure 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-${VENODR}-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 ;; x86_64:Haiku:*:*) echo x86_64-${VENDOR}-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 ;; SX-ACE:SUPER-UX:*:*) echo sxace-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 eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then 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 case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi 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 ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-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 ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-${VENDOR}-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-${VENDOR}-onefs exit ;; esac cat >&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: quota-4.09/config.h000066400000000000000000000105501446321055100142170ustar00rootroot00000000000000/* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ /* File with mounted filesystems */ #define ALT_MTAB "/proc/mounts" /* Check rights to query / set quotas before calling quotactl */ #define BSD_BEHAVIOUR 1 /* Configuration options */ #define COMPILE_OPTS " USE_LDAP_MAIL_LOOKUP EXT2_DIRECT HOSTS_ACCESS RPC BSD_BEHAVIOUR" /* Define to 1 if translation of program messages to the user's native language is requested. */ #define ENABLE_NLS 1 /* Scanning of ext? filesystems using e2fslib */ #define EXT2_DIRECT 1 /* Define if the GNU dcgettext() function is already present or preinstalled. */ #define HAVE_DCGETTEXT 1 /* Define if the GNU gettext() function is already present or preinstalled. */ #define HAVE_GETTEXT 1 /* Define if you have the iconv() function. */ /* #undef HAVE_ICONV */ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Use nl_langinfo for querying locale */ #define HAVE_NL_LANGINFO 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Use hosts.allow and hosts.deny for access checking of rpc.rquotad */ #define HOSTS_ACCESS 1 /* Name of package */ #define PACKAGE "quota" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "jack@suse.cz" /* Locale-specific data directory */ #define PACKAGE_LOCALE_DIR "/tmp/quota/share/locale" /* Define to the full name of this package. */ #define PACKAGE_NAME "quota" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "quota 4.09" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "quota" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "4.09" /* Directory for PID files */ #define PID_DIR "/var/run" /* Support for RPC */ #define RPC 1 /* Allow setting of quotas over RPC */ /* #undef RPC_SETQUOTA */ /* The size of `time_t', as computed by sizeof. */ #define SIZEOF_TIME_T 8 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Use gettext to translate messages */ #define USE_GETTEXT 1 /* Lookup email address using LDAP */ #define USE_LDAP_MAIL_LOOKUP 1 /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # define _ALL_SOURCE 1 #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS 1 #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # define _TANDEM_SOURCE 1 #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # define __EXTENSIONS__ 1 #endif /* Version number of package */ #define VERSION "4.09" /* Assume quota mount options for root filesystem */ /* #undef XFS_ROOTHACK */ /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ /* Define to 1 if on MINIX. */ /* #undef _MINIX */ /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ /* #undef _POSIX_1_SOURCE */ /* Define to 1 if you need to in order for `stat' and other things to work. */ /* #undef _POSIX_SOURCE */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif quota-4.09/config.h.in000066400000000000000000000077331446321055100146350ustar00rootroot00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* File with mounted filesystems */ #undef ALT_MTAB /* Check rights to query / set quotas before calling quotactl */ #undef BSD_BEHAVIOUR /* Configuration options */ #undef COMPILE_OPTS /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Scanning of ext? filesystems using e2fslib */ #undef EXT2_DIRECT /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Use nl_langinfo for querying locale */ #undef HAVE_NL_LANGINFO /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Use hosts.allow and hosts.deny for access checking of rpc.rquotad */ #undef HOSTS_ACCESS /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Locale-specific data directory */ #undef PACKAGE_LOCALE_DIR /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Directory for PID files */ #undef PID_DIR /* Support for RPC */ #undef RPC /* Allow setting of quotas over RPC */ #undef RPC_SETQUOTA /* The size of `time_t', as computed by sizeof. */ #undef SIZEOF_TIME_T /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Use gettext to translate messages */ #undef USE_GETTEXT /* Lookup email address using LDAP */ #undef USE_LDAP_MAIL_LOOKUP /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Assume quota mount options for root filesystem */ #undef XFS_ROOTHACK /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif quota-4.09/config.rpath000077500000000000000000000352171446321055100151200ustar00rootroot00000000000000#! /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-2003 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 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 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. # # 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 M$VC, # 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 AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux*) case $CC in icc|ecc) wl='-Wl,' ;; ccc) wl='-Wl,' ;; 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*) ;; 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 ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then 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 can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': 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 ;; netbsd*) ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then # 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' 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 ;; bsdi4*) ;; 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*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then hardcode_direct=no 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*) 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* | hpux11*) if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) 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 ;; 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=: ;; sco3.2v5*) ;; 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.2uw2*) hardcode_direct=yes hardcode_minus_L=no ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) ;; sysv5*) hardcode_libdir_flag_spec= ;; 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*) ;; bsdi4*) ;; cygwin* | mingw* | pw32*) shrext=.dll ;; darwin* | rhapsody*) shrext=.dylib ;; dgux*) ;; freebsd1*) ;; freebsd*) ;; gnu*) ;; hpux9* | hpux10* | hpux11*) case "$host_cpu" in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac ;; 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*) ;; netbsd*) ;; newsos6) ;; nto-qnx) ;; openbsd*) ;; os2*) libname_spec='$name' shrext=.dll ;; osf3* | osf4* | osf5*) ;; sco3.2v5*) ;; solaris*) ;; sunos4*) ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ;; sysv4*MP*) ;; 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"` sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # 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 # 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 or 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 1992-2017 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-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) 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*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -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 \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | 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 \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-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-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | 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-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | 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-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | 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 ;; asmjs) basic_machine=asmjs-unknown ;; 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 ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 | 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 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` os=$os"spe" ;; 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*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 ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; 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 ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-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 ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; 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 ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsx-tandem) basic_machine=nsx-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 | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) 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) 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 | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) 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) basic_machine=s390-ibm ;; s390-*) basic_machine=s390-`echo $basic_machine | sed 's/^[^-]*-//'` ;; s390x) basic_machine=s390x-ibm ;; s390x-*) basic_machine=s390x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 ;; tile*) basic_machine=$basic_machine-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 ;; wasm32) basic_machine=wasm32-unknown ;; 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 ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; 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* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -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* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -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* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) # 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 ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -ios) ;; -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 ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) 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 ;; 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 ;; pru-*) os=-elf ;; *-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: quota-4.09/configure000077500000000000000000011073661446321055100145250ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for quota 4.09. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 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. as_myself= 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 # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # 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. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} 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 test -x / || 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 : export CONFIG_SHELL # 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. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 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 and jack@suse.cz about $0: your system, including any error possibly output before $0: this message. Then install a modern shell, or manually $0: run 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_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_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 STATUS 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=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&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; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 as_test_x='test -x' as_executable_p=as_fn_executable_p # 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'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/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='quota' PACKAGE_TARNAME='quota' PACKAGE_VERSION='4.09' PACKAGE_STRING='quota 4.09' PACKAGE_BUGREPORT='jack@suse.cz' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS WITH_RPC_FALSE WITH_RPC_TRUE TIRPC_LIBS TIRPC_CFLAGS RPCGEN WRAP_LIBS WITH_NETLINK_FALSE WITH_NETLINK_TRUE LIBNL3_LIBS LIBNL3_CFLAGS DBUS_LIBS DBUS_CFLAGS EXT2FS_LIBS EXT2FS_CFLAGS COM_ERR_LIBS COM_ERR_CFLAGS LDAP_LIBS WARN_CFLAGS PIE_LDFLAGS POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV host_os host_vendor host_cpu host build_os build_vendor build_cpu build MSGMERGE XGETTEXT GMSGFMT MSGFMT USE_NLS MKINSTALLDIRS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG LN_S RANLIB ac_ct_AR AR EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V 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_silent_rules enable_dependency_tracking enable_largefile enable_nls with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix enable_pie enable_werror enable_ldapmail enable_ext2direct enable_netlink enable_libwrap enable_rpc enable_rpcsetquota enable_xfs_roothack enable_bsd_behaviour with_proc_mounts with_pid_dir ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR COM_ERR_CFLAGS COM_ERR_LIBS EXT2FS_CFLAGS EXT2FS_LIBS DBUS_CFLAGS DBUS_LIBS LIBNL3_CFLAGS LIBNL3_LIBS RPCGEN TIRPC_CFLAGS TIRPC_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_TARNAME}' 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= ;; *) 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 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 quota 4.09 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/quota] --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 case $ac_init_help in short | recursive ) echo "Configuration of quota 4.09:";; esac 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-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-largefile omit support for large files --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --disable-pie Disable Position Independent Executable --enable-werror Treat all warnings as errors, useful for development --disable-ldapmail Do not use the ldap mail address lookups. --disable-ext2direct Disable scanning of EXT2/EXT3 filesystem using e2fslib. --disable-netlink Do not compile daemon receiving quota messages via netlink. --disable-libwrap Do not use hosts.* for access checking on rpc.quotad. --disable-rpc Disable RPC support --enable-rpcsetquota Use RPC for setting quotas --enable-xfs-roothack Support old XFS root filesystems. --disable-bsd-behaviour Mimic BSD behaviour Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --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 --with-proc-mounts Use alternate mtab file instead of /proc/mounts --with-pid-dir=DIRECTORY Create PID files in this directory instead of /var/run 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 PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path COM_ERR_CFLAGS C compiler flags for COM_ERR, overriding pkg-config COM_ERR_LIBS linker flags for COM_ERR, overriding pkg-config EXT2FS_CFLAGS C compiler flags for EXT2FS, overriding pkg-config EXT2FS_LIBS linker flags for EXT2FS, overriding pkg-config DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config DBUS_LIBS linker flags for DBUS, overriding pkg-config LIBNL3_CFLAGS C compiler flags for LIBNL3, overriding pkg-config LIBNL3_LIBS linker flags for LIBNL3, overriding pkg-config RPCGEN RPC compiler command TIRPC_CFLAGS C compiler flags for TIRPC, overriding pkg-config TIRPC_LIBS linker flags for TIRPC, 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 . _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 quota configure 4.09 generated by GNU Autoconf 2.69 Copyright (C) 2012 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_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; } > conftest.i && { 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # 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 eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; 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.i 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;} ( $as_echo "## --------------------------- ## ## Report this to jack@suse.cz ## ## --------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # 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 eval \${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_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 || 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # 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 eval \${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 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 quota $as_me 4.09, which was generated by GNU Autoconf 2.69. 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 $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" 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 $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" 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 $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" 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 $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" 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 # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac 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" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } 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_config_headers="$ac_config_headers config.h" am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$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. # 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 ${ac_cv_path_install+:} false; 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 as_fn_executable_p "$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; } # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file 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 --is-lightweight"; then am_missing_run="$MISSING " 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+set}" != 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 ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p "$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 ${ac_cv_path_mkdir+:} false; 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 as_fn_executable_p "$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; } 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 ${ac_cv_prog_AWK+:} false; 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 as_fn_executable_p "$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 eval \${ac_cv_prog_make_${ac_make}_set+:} false; 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 # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' 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='quota' VERSION='4.09' 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"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo 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='\' am__nodep='_no' 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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$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_error 77 "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 ${ac_cv_objext+:} false; 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 ${ac_cv_c_compiler_gnu+:} false; 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 ${ac_cv_prog_cc_g+:} false; 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 ${ac_cv_prog_cc_c89+:} false; 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 struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; 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. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu 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 ${am_cv_CC_dependencies_compiler_type+:} false; 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". rm -rf conftest.dir 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 10 /bin/sh. echo '/* dummy */' > 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 ;; msvc7 | msvc7msys | 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 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 ${ac_cv_prog_CPP+:} false; 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.i 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.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i 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.i 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.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i 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 grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; 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" as_fn_executable_p "$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 ${ac_cv_path_EGREP+:} false; 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" as_fn_executable_p "$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 ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; 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 " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done 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" = xyes; 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 ${ac_cv_safe_to_define___extensions__+:} false; 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 # 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 ${ac_cv_sys_largefile_CC+:} false; 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 ${ac_cv_sys_file_offset_bits+:} false; 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 ${ac_cv_sys_large_files+:} false; 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 # =========================== # Find required base packages # =========================== if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" 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 ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$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 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 test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" 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 ${ac_cv_prog_ac_ct_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$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_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 test -n "$ac_ct_AR" && break done 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 fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; 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 am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext 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: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # 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__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; 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 if test -n "$ac_tool_prefix"; then for ac_prog in cc gcc clang 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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 cc gcc clang 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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$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 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 ${ac_cv_c_compiler_gnu+:} false; 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 ${ac_cv_prog_cc_g+:} false; 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 ${ac_cv_prog_cc_c89+:} false; 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 struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; 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. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu 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 ${am_cv_CC_dependencies_compiler_type+:} false; 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". rm -rf conftest.dir 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 10 /bin/sh. echo '/* dummy */' > 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 ;; msvc7 | msvc7msys | 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 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 ${ac_cv_prog_RANLIB+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_RANLIB+:} false; 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 as_fn_executable_p "$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 { $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 eval \${ac_cv_prog_make_${ac_make}_set+:} false; 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$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 ${ac_cv_path_PKG_CONFIG+:} false; 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 as_fn_executable_p "$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 ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; 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 as_fn_executable_p "$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.20 { $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 { $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 ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* 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 sort of thing. */ char tx; char *t = &tx; 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 sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; 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 inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes; then : $as_echo "#define HAVE_NL_LANGINFO 1" >>confdefs.h fi # =============== # Gettext support # =============== MKINSTALLDIRS= if test -n "$ac_aux_dir"; then case "$ac_aux_dir" in /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; esac fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" 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 ${ac_cv_path_MSGFMT+:} false; 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 if $ac_dir/$ac_word --statistics /dev/null >/dev/null 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 ${ac_cv_path_GMSGFMT+:} false; 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 as_fn_executable_p "$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 # 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 ${ac_cv_path_XGETTEXT+:} false; 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 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 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 # 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 ${ac_cv_path_MSGMERGE+:} false; 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 if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 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 if test "$GMSGFMT" != ":"; then if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 $as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; } GMSGFMT=":" fi fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --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 : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi rm -f messages.po fi ac_config_commands="$ac_config_commands default-1" 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" # 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 ${ac_cv_build+:} false; 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 ${ac_cv_host+:} false; 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 # 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 ${acl_cv_path_LD+:} false; 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. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi 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 ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&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 ${acl_cv_rpath+:} false; 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 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/lib" 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/lib"; 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 */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` 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*) 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/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) 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 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; } 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 ${gt_cv_func_gnugettext1_libc+:} false; 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 (int) 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 ${am_cv_func_iconv+:} false; 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/lib" 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/lib"; 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 */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` 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*) 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/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) 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 ${gt_cv_func_gnugettext1_libintl+:} false; 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 (); int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0) ; 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 (); int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0) ; 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 "$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" if test "$enable_nls" != "no"; then : enable_nls="yes" $as_echo "#define USE_GETTEXT 1" >>confdefs.h fi if test "x${prefix}" = "xNONE"; then : cat >>confdefs.h <<_ACEOF #define PACKAGE_LOCALE_DIR "${ac_default_prefix}/share/locale" _ACEOF else cat >>confdefs.h <<_ACEOF #define PACKAGE_LOCALE_DIR "${prefix}/share/locale" _ACEOF fi # ================ # Check for ldflags # ================ # Check whether --enable-pie was given. if test "${enable_pie+set}" = set; then : enableval=$enable_pie; enable_pie="$enableval" else enable_pie=yes fi if test x"$enable_pie" != "xno"; then : PIE_LDFLAGS="-pie" fi # ================ # Check for cflags # ================ WARN_CFLAGS="-Wall" # Check whether --enable-werror was given. if test "${enable_werror+set}" = set; then : enableval=$enable_werror; enable_werror="$enableval" else enable_werror=no fi if test x"$enable_werror" != "xno"; then : WARN_CFLAGS="$WARN_CFLAGS -Werror" fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 $as_echo_n "checking size of time_t... " >&6; } if ${ac_cv_sizeof_time_t+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "#include "; then : else if test "$ac_cv_type_time_t" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (time_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_time_t=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 $as_echo "$ac_cv_sizeof_time_t" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_TIME_T $ac_cv_sizeof_time_t _ACEOF # ========= # Find ldap # ========= # Check whether --enable-ldapmail was given. if test "${enable_ldapmail+set}" = set; then : enableval=$enable_ldapmail; enable_ldapmail="$enableval" else enable_ldapmail=auto fi if test "x$enable_ldapmail" != "xno"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_initialize in -lldap" >&5 $as_echo_n "checking for ldap_initialize in -lldap... " >&6; } if ${ac_cv_lib_ldap_ldap_initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lldap $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 ldap_initialize (); int main () { return ldap_initialize (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ldap_ldap_initialize=yes else ac_cv_lib_ldap_ldap_initialize=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_ldap_ldap_initialize" >&5 $as_echo "$ac_cv_lib_ldap_ldap_initialize" >&6; } if test "x$ac_cv_lib_ldap_ldap_initialize" = xyes; then : build_ldap="yes" LDAP_LIBS="-lldap -llber" $as_echo "#define USE_LDAP_MAIL_LOOKUP 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS USE_LDAP_MAIL_LOOKUP" else build_ldap="no" if test "x$enable_ldapmail" = "xyes"; then : as_fn_error $? "LDAP support required but library not found." "$LINENO" 5; fi fi else build_ldap="no" fi # =============== # Find ext2direct # =============== # Check whether --enable-ext2direct was given. if test "${enable_ext2direct+set}" = set; then : enableval=$enable_ext2direct; enable_ext2direct="$enableval" else enable_ext2direct=auto fi if test "x$enable_ext2direct" != "xno"; then : build_ext2direct="yes" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for com_err" >&5 $as_echo_n "checking for com_err... " >&6; } if test -n "$COM_ERR_CFLAGS"; then pkg_cv_COM_ERR_CFLAGS="$COM_ERR_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"com_err\""; } >&5 ($PKG_CONFIG --exists --print-errors "com_err") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_COM_ERR_CFLAGS=`$PKG_CONFIG --cflags "com_err" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$COM_ERR_LIBS"; then pkg_cv_COM_ERR_LIBS="$COM_ERR_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"com_err\""; } >&5 ($PKG_CONFIG --exists --print-errors "com_err") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_COM_ERR_LIBS=`$PKG_CONFIG --libs "com_err" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 COM_ERR_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "com_err" 2>&1` else COM_ERR_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "com_err" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$COM_ERR_PKG_ERRORS" >&5 build_ext2direct="no" if test "x$enable_ext2direct" = "xyes"; then : as_fn_error $? "Ext2direct requested but required com_err library not found" "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } build_ext2direct="no" if test "x$enable_ext2direct" = "xyes"; then : as_fn_error $? "Ext2direct requested but required com_err library not found" "$LINENO" 5 fi else COM_ERR_CFLAGS=$pkg_cv_COM_ERR_CFLAGS COM_ERR_LIBS=$pkg_cv_COM_ERR_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ext2fs" >&5 $as_echo_n "checking for ext2fs... " >&6; } if test -n "$EXT2FS_CFLAGS"; then pkg_cv_EXT2FS_CFLAGS="$EXT2FS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ext2fs\""; } >&5 ($PKG_CONFIG --exists --print-errors "ext2fs") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EXT2FS_CFLAGS=`$PKG_CONFIG --cflags "ext2fs" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EXT2FS_LIBS"; then pkg_cv_EXT2FS_LIBS="$EXT2FS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ext2fs\""; } >&5 ($PKG_CONFIG --exists --print-errors "ext2fs") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EXT2FS_LIBS=`$PKG_CONFIG --libs "ext2fs" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 EXT2FS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ext2fs" 2>&1` else EXT2FS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ext2fs" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EXT2FS_PKG_ERRORS" >&5 build_ext2direct="no" if test "x$enable_ext2direct" = "xyes"; then : as_fn_error $? "Ext2direct requested but required ext2fs library not found" "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } build_ext2direct="no" if test "x$enable_ext2direct" = "xyes"; then : as_fn_error $? "Ext2direct requested but required ext2fs library not found" "$LINENO" 5 fi else EXT2FS_CFLAGS=$pkg_cv_EXT2FS_CFLAGS EXT2FS_LIBS=$pkg_cv_EXT2FS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$build_ext2direct" != "xno"; then : $as_echo "#define EXT2_DIRECT 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS EXT2_DIRECT" fi else build_ext2direct="no" fi # ================== # Netlink enablement # ================== # Check whether --enable-netlink was given. if test "${enable_netlink+set}" = set; then : enableval=$enable_netlink; enable_netlink="$enableval" else enable_netlink=auto fi if test "x$enable_netlink" != "xno"; then : build_netlink="yes" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbus-1" >&5 $as_echo_n "checking for dbus-1... " >&6; } if test -n "$DBUS_CFLAGS"; then pkg_cv_DBUS_CFLAGS="$DBUS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1\""; } >&5 ($PKG_CONFIG --exists --print-errors "dbus-1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_DBUS_CFLAGS=`$PKG_CONFIG --cflags "dbus-1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$DBUS_LIBS"; then pkg_cv_DBUS_LIBS="$DBUS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1\""; } >&5 ($PKG_CONFIG --exists --print-errors "dbus-1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_DBUS_LIBS=`$PKG_CONFIG --libs "dbus-1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "dbus-1" 2>&1` else DBUS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "dbus-1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$DBUS_PKG_ERRORS" >&5 build_netlink="no" if test "x$enable_netlink" = "xyes" ; then : as_fn_error $? "Required dbus libraries for quota netlink daemon not found." "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } build_netlink="no" if test "x$enable_netlink" = "xyes" ; then : as_fn_error $? "Required dbus libraries for quota netlink daemon not found." "$LINENO" 5 fi else DBUS_CFLAGS=$pkg_cv_DBUS_CFLAGS DBUS_LIBS=$pkg_cv_DBUS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnl-3.0 >= 3.1 libnl-genl-3.0" >&5 $as_echo_n "checking for libnl-3.0 >= 3.1 libnl-genl-3.0... " >&6; } if test -n "$LIBNL3_CFLAGS"; then pkg_cv_LIBNL3_CFLAGS="$LIBNL3_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0 >= 3.1 libnl-genl-3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnl-3.0 >= 3.1 libnl-genl-3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBNL3_CFLAGS=`$PKG_CONFIG --cflags "libnl-3.0 >= 3.1 libnl-genl-3.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBNL3_LIBS"; then pkg_cv_LIBNL3_LIBS="$LIBNL3_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-3.0 >= 3.1 libnl-genl-3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnl-3.0 >= 3.1 libnl-genl-3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBNL3_LIBS=`$PKG_CONFIG --libs "libnl-3.0 >= 3.1 libnl-genl-3.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 LIBNL3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnl-3.0 >= 3.1 libnl-genl-3.0" 2>&1` else LIBNL3_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnl-3.0 >= 3.1 libnl-genl-3.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBNL3_PKG_ERRORS" >&5 build_netlink="no" if test "x$enable_netlink" = "xyes" ; then : as_fn_error $? "Required libnl3 libraries for quota netlink daemon not found." "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } build_netlink="no" if test "x$enable_netlink" = "xyes" ; then : as_fn_error $? "Required libnl3 libraries for quota netlink daemon not found." "$LINENO" 5 fi else LIBNL3_CFLAGS=$pkg_cv_LIBNL3_CFLAGS LIBNL3_LIBS=$pkg_cv_LIBNL3_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi else build_netlink="no" fi if test "x$build_netlink" != "xno"; then WITH_NETLINK_TRUE= WITH_NETLINK_FALSE='#' else WITH_NETLINK_TRUE='#' WITH_NETLINK_FALSE= fi # ============= # libwrap usage # ============= # Check whether --enable-libwrap was given. if test "${enable_libwrap+set}" = set; then : enableval=$enable_libwrap; enable_libwrap="$enableval" else enable_libwrap=auto fi if test "x$enable_libwrap" != "xno"; then : ac_fn_c_check_header_mongrel "$LINENO" "tcpd.h" "ac_cv_header_tcpd_h" "$ac_includes_default" if test "x$ac_cv_header_tcpd_h" = xyes; then : build_libwrap="yes" WRAP_LIBS="-lwrap" $as_echo "#define HOSTS_ACCESS 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS HOSTS_ACCESS" else build_libwrap="no" if test "x$enable_libwrap" = "xyes" ; then : as_fn_error $? "tcpd.h not found and requested" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tcpd.h not found" >&5 $as_echo "$as_me: WARNING: tcpd.h not found" >&2;} fi fi else build_libwrap="no" fi # ===================== # various build options # ===================== # Check whether --enable-rpc was given. if test "${enable_rpc+set}" = set; then : enableval=$enable_rpc; enable_rpc="$enableval" else enable_rpc=auto fi if test x"$enable_rpc" != "xno"; then : # Extract the first word of "rpcgen", so it can be a program name with args. set dummy rpcgen; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_RPCGEN+:} false; then : $as_echo_n "(cached) " >&6 else case $RPCGEN in [\\/]* | ?:[\\/]*) ac_cv_path_RPCGEN="$RPCGEN" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RPCGEN="$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 RPCGEN=$ac_cv_path_RPCGEN if test -n "$RPCGEN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RPCGEN" >&5 $as_echo "$RPCGEN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi build_rpc="yes" if test x"$RPCGEN" = "x"; then : if test x"$enable_rpc" = "xyes"; then : as_fn_error $? "could not locate required rpcgen" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: rpcgen not found" >&5 $as_echo "$as_me: WARNING: rpcgen not found" >&2;} fi build_rpc="no" fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libtirpc" >&5 $as_echo_n "checking for libtirpc... " >&6; } if test -n "$TIRPC_CFLAGS"; then pkg_cv_TIRPC_CFLAGS="$TIRPC_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_TIRPC_CFLAGS=`$PKG_CONFIG --cflags "libtirpc" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$TIRPC_LIBS"; then pkg_cv_TIRPC_LIBS="$TIRPC_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_TIRPC_LIBS=`$PKG_CONFIG --libs "libtirpc" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 TIRPC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtirpc" 2>&1` else TIRPC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtirpc" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$TIRPC_PKG_ERRORS" >&5 if test x"$enable_rpc" = "xyes"; then : as_fn_error $? "could not locate required libtirpc" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libtirpc not found" >&5 $as_echo "$as_me: WARNING: libtirpc not found" >&2;} fi build_rpc="no" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test x"$enable_rpc" = "xyes"; then : as_fn_error $? "could not locate required libtirpc" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libtirpc not found" >&5 $as_echo "$as_me: WARNING: libtirpc not found" >&2;} fi build_rpc="no" else TIRPC_CFLAGS=$pkg_cv_TIRPC_CFLAGS TIRPC_LIBS=$pkg_cv_TIRPC_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test x"$build_rpc" != "xno"; then : $as_echo "#define RPC 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS RPC" fi else build_rpc="no" fi if test x"$build_rpc" != "xno"; then WITH_RPC_TRUE= WITH_RPC_FALSE='#' else WITH_RPC_TRUE='#' WITH_RPC_FALSE= fi # Check whether --enable-rpcsetquota was given. if test "${enable_rpcsetquota+set}" = set; then : enableval=$enable_rpcsetquota; enable_rpcsetquota="$enableval" else enable_rpcsetquota=no fi if test x"$enable_rpcsetquota" = "xyes"; then : $as_echo "#define RPC_SETQUOTA 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS RPC_SETQUOTA" fi # Check whether --enable-xfs-roothack was given. if test "${enable_xfs_roothack+set}" = set; then : enableval=$enable_xfs_roothack; enable_xfs_roothack="$enableval" else enable_xfs_roothack=no fi if test x"$enable_xfs_roothack" = "xyes"; then : $as_echo "#define XFS_ROOTHACK 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS XFS_ROOTHACK" fi # Check whether --enable-bsd-behaviour was given. if test "${enable_bsd_behaviour+set}" = set; then : enableval=$enable_bsd_behaviour; enable_bsd_behaviour="$enableval" else enable_bsd_behaviour=yes fi if test x"$enable_bsd_behaviour" != "xno"; then : $as_echo "#define BSD_BEHAVIOUR 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS BSD_BEHAVIOUR" fi # Check whether --with-proc-mounts was given. if test "${with_proc_mounts+set}" = set; then : withval=$with_proc_mounts; with_proc_mounts="$withval" else with_proc_mounts="/proc/mounts" fi if test "$with_proc_mounts" != "no"; then : cat >>confdefs.h <<_ACEOF #define ALT_MTAB "$with_proc_mounts" _ACEOF fi # Check whether --with-pid-dir was given. if test "${with_pid_dir+set}" = set; then : withval=$with_pid_dir; with_pid_dir="$withval" fi if test "X$with_pid_dir" == "X" -o "$with_pid_dir" == "yes" -o "$with_pid_dir" == "no"; then : with_pid_dir="/var/run" fi cat >>confdefs.h <<_ACEOF #define PID_DIR "$with_pid_dir" _ACEOF cat >>confdefs.h <<_ACEOF #define COMPILE_OPTS "$COMPILE_OPTS" _ACEOF ac_config_files="$ac_config_files Makefile po/Makefile.in" 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 if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi 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= U= 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } 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 "${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 "${WITH_NETLINK_TRUE}" && test -z "${WITH_NETLINK_FALSE}"; then as_fn_error $? "conditional \"WITH_NETLINK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_RPC_TRUE}" && test -z "${WITH_RPC_FALSE}"; then as_fn_error $? "conditional \"WITH_RPC\" 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. as_myself= 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 STATUS 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=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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 quota $as_me 4.09, which was generated by GNU Autoconf 2.69. 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 ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ quota config.status 4.09 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 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=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= 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"` ;; '') as_fn_error $? "missing file argument" ;; 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" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it # from automake. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; *) 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= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_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 -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # 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 {' >"$ac_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 >>"\$ac_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 >>"\$ac_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 < "$ac_tmp/subs1.awk" > "$ac_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 sole $(srcdir), # ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// 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 >"$ac_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_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; 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="$ac_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 1 "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 >"$ac_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 "$ac_tmp/subs.awk" \ >$ac_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' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_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 "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_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 "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_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 "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_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"" || { # Older Autoconf 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"` # 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'`; 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 } ;; "default-1":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 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, GMOFILES, UPDATEPOFILES, DUMMYPOFILES 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" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= GMOFILES= UPDATEPOFILES= DUMMYPOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" 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|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|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 1 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 # ============================================== # Display final informations about configuration # ============================================== { $as_echo "$as_me:${as_lineno-$LINENO}: ============================================================================== Build configuration: bsd-behaviour: ${enable_bsd_behaviour} ext2-direct: ${build_ext2direct} ldap-mail: ${build_ldap} libwrap: ${build_libwrap} netlink: ${build_netlink} nls: ${enable_nls} pid-dir: ${with_pid_dir} proc-mounts: ${with_proc_mounts} rpc: ${build_rpc} rpcsetquota: ${enable_rpcsetquota} xfs-roothack: ${enable_xfs_roothack} werror: ${enable_werror} ============================================================================== " >&5 $as_echo "$as_me: ============================================================================== Build configuration: bsd-behaviour: ${enable_bsd_behaviour} ext2-direct: ${build_ext2direct} ldap-mail: ${build_ldap} libwrap: ${build_libwrap} netlink: ${build_netlink} nls: ${enable_nls} pid-dir: ${with_pid_dir} proc-mounts: ${with_proc_mounts} rpc: ${build_rpc} rpcsetquota: ${enable_rpcsetquota} xfs-roothack: ${enable_xfs_roothack} werror: ${enable_werror} ============================================================================== " >&6;} quota-4.09/configure.ac000066400000000000000000000225101446321055100150660ustar00rootroot00000000000000# Process this file with autoconf to create configure. AC_PREREQ([2.60]) # ==================== # Version informations # ==================== m4_define([quota_version_major],[4]) m4_define([quota_version_minor],[09]) m4_define([quota_version],[quota_version_major.quota_version_minor]) # ============= # Automake init # ============= AC_INIT([quota],[quota_version], [jack@suse.cz]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([1.11 foreign dist-xz dist-bzip2]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AC_LANG([C]) AC_USE_SYSTEM_EXTENSIONS AC_SYS_LARGEFILE # =========================== # Find required base packages # =========================== m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_PROG_CC([cc gcc clang]) AC_PROG_RANLIB AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET PKG_PROG_PKG_CONFIG([0.20]) AC_C_CONST AC_C_INLINE AC_CHECK_FUNC([nl_langinfo], [ AC_DEFINE([HAVE_NL_LANGINFO], 1, [Use nl_langinfo for querying locale]) ]) # =============== # Gettext support # =============== AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.12.1]) AS_IF([test "$enable_nls" != "no"], [ enable_nls="yes" AC_DEFINE([USE_GETTEXT], 1, [Use gettext to translate messages]) ]) AS_IF([test "x${prefix}" = "xNONE"], [ AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${ac_default_prefix}/share/locale", [Locale-specific data directory]) ], [ AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${prefix}/share/locale", [Locale-specific data directory]) ]) # ================ # Check for ldflags # ================ AC_ARG_ENABLE([pie], [AS_HELP_STRING([--disable-pie], [Disable Position Independent Executable])], [enable_pie="$enableval"], [enable_pie=yes] ) AS_IF([test x"$enable_pie" != "xno"], [ PIE_LDFLAGS="-pie" ]) AC_SUBST([PIE_LDFLAGS]) # ================ # Check for cflags # ================ WARN_CFLAGS="-Wall" AC_ARG_ENABLE([werror], [AS_HELP_STRING([--enable-werror], [Treat all warnings as errors, useful for development])], [enable_werror="$enableval"], [enable_werror=no] ) AS_IF([test x"$enable_werror" != "xno"], [ WARN_CFLAGS="$WARN_CFLAGS -Werror" ]) AC_SUBST([WARN_CFLAGS]) AC_CHECK_SIZEOF([time_t], [], [#include ]) # ========= # Find ldap # ========= AC_ARG_ENABLE([ldapmail], [AS_HELP_STRING([--disable-ldapmail], [Do not use the ldap mail address lookups.])], [enable_ldapmail="$enableval"], [enable_ldapmail=auto] ) AS_IF([test "x$enable_ldapmail" != "xno"], [ AC_CHECK_LIB([ldap], [ldap_initialize], [ build_ldap="yes" LDAP_LIBS="-lldap -llber" AC_DEFINE([USE_LDAP_MAIL_LOOKUP], 1, [Lookup email address using LDAP]) COMPILE_OPTS="$COMPILE_OPTS USE_LDAP_MAIL_LOOKUP" ], [ build_ldap="no" AS_IF([test "x$enable_ldapmail" = "xyes"], [ AC_MSG_ERROR([LDAP support required but library not found.]); ]) ]) ], [ build_ldap="no" ]) AC_SUBST(LDAP_LIBS) # =============== # Find ext2direct # =============== AC_ARG_ENABLE([ext2direct], [AS_HELP_STRING([--disable-ext2direct], [Disable scanning of EXT2/EXT3 filesystem using e2fslib.])], [enable_ext2direct="$enableval"], [enable_ext2direct=auto] ) AS_IF([test "x$enable_ext2direct" != "xno"], [ build_ext2direct="yes" PKG_CHECK_MODULES([COM_ERR],[com_err], [], [ build_ext2direct="no" AS_IF([test "x$enable_ext2direct" = "xyes"], [ AC_MSG_ERROR([Ext2direct requested but required com_err library not found]) ]) ]) PKG_CHECK_MODULES([EXT2FS],[ext2fs], [], [ build_ext2direct="no" AS_IF([test "x$enable_ext2direct" = "xyes"], [ AC_MSG_ERROR([Ext2direct requested but required ext2fs library not found]) ]) ]) AS_IF([test "x$build_ext2direct" != "xno"], [ AC_DEFINE([EXT2_DIRECT], 1, [Scanning of ext? filesystems using e2fslib]) COMPILE_OPTS="$COMPILE_OPTS EXT2_DIRECT" ]) ], [ build_ext2direct="no" ]) AC_SUBST(EXT2FS_CFLAGS) AC_SUBST(EXT2FS_LIBS) AC_SUBST(COM_ERR_CFLAGS) AC_SUBST(COM_ERR_LIBS) # ================== # Netlink enablement # ================== AC_ARG_ENABLE([netlink], [AS_HELP_STRING([--disable-netlink], [Do not compile daemon receiving quota messages via netlink.])], [enable_netlink="$enableval"], [enable_netlink=auto] ) AS_IF([test "x$enable_netlink" != "xno"], [ build_netlink="yes" PKG_CHECK_MODULES([DBUS], [dbus-1], [], [ build_netlink="no" AS_IF([test "x$enable_netlink" = "xyes"] , [ AC_MSG_ERROR([Required dbus libraries for quota netlink daemon not found.]) ]) ]) PKG_CHECK_MODULES([LIBNL3], [libnl-3.0 >= 3.1 libnl-genl-3.0], [], [ build_netlink="no" AS_IF([test "x$enable_netlink" = "xyes"] , [ AC_MSG_ERROR([Required libnl3 libraries for quota netlink daemon not found.]) ]) ]) ], [ build_netlink="no" ]) AM_CONDITIONAL([WITH_NETLINK], [test "x$build_netlink" != "xno"]) AC_SUBST(DBUS_CFLAGS) AC_SUBST(DBUS_LIBS) AC_SUBST(LIBNL3_CFLAGS) AC_SUBST(LIBNL3_LIBS) # ============= # libwrap usage # ============= AC_ARG_ENABLE([libwrap], [AS_HELP_STRING([--disable-libwrap], [Do not use hosts.* for access checking on rpc.quotad.])], [enable_libwrap="$enableval"], [enable_libwrap=auto] ) AS_IF([test "x$enable_libwrap" != "xno"], [ AC_CHECK_HEADER([tcpd.h], [ build_libwrap="yes" WRAP_LIBS="-lwrap" AC_DEFINE([HOSTS_ACCESS], 1, [Use hosts.allow and hosts.deny for access checking of rpc.rquotad]) COMPILE_OPTS="$COMPILE_OPTS HOSTS_ACCESS" ], [ build_libwrap="no" AS_IF([test "x$enable_libwrap" = "xyes"] , [ AC_MSG_ERROR([tcpd.h not found and requested]) ], [ AC_MSG_WARN([tcpd.h not found]) ]) ]) ], [ build_libwrap="no" ]) AC_SUBST(WRAP_LIBS) # ===================== # various build options # ===================== AC_ARG_ENABLE([rpc], [AS_HELP_STRING([--disable-rpc], [Disable RPC support])], [enable_rpc="$enableval"], [enable_rpc=auto] ) AS_IF([test x"$enable_rpc" != "xno"], [ AC_PATH_PROG([RPCGEN], [rpcgen]) AC_ARG_VAR([RPCGEN], [RPC compiler command]) build_rpc="yes" AS_IF([test x"$RPCGEN" = "x"], [ AS_IF([test x"$enable_rpc" = "xyes"], [ AC_MSG_ERROR([could not locate required rpcgen]) ], [ AC_MSG_WARN([rpcgen not found]) ]) build_rpc="no" ]) PKG_CHECK_MODULES([TIRPC], [libtirpc], [], [ AS_IF([test x"$enable_rpc" = "xyes"], [ AC_MSG_ERROR([could not locate required libtirpc]) ], [ AC_MSG_WARN([libtirpc not found]) ]) build_rpc="no" ]) AS_IF([test x"$build_rpc" != "xno"], [ AC_DEFINE([RPC], 1, [Support for RPC]) COMPILE_OPTS="$COMPILE_OPTS RPC" ]) ], [ build_rpc="no" ]) AM_CONDITIONAL([WITH_RPC], [test x"$build_rpc" != "xno"]) AC_ARG_ENABLE([rpcsetquota], [AS_HELP_STRING([--enable-rpcsetquota], [Use RPC for setting quotas])], [enable_rpcsetquota="$enableval"], [enable_rpcsetquota=no] ) AS_IF([test x"$enable_rpcsetquota" = "xyes"], [ AC_DEFINE([RPC_SETQUOTA], 1, [Allow setting of quotas over RPC]) COMPILE_OPTS="$COMPILE_OPTS RPC_SETQUOTA" ]) AC_ARG_ENABLE([xfs-roothack], [AS_HELP_STRING([--enable-xfs-roothack], [Support old XFS root filesystems.])], [enable_xfs_roothack="$enableval"], [enable_xfs_roothack=no] ) AS_IF([test x"$enable_xfs_roothack" = "xyes"], [ AC_DEFINE([XFS_ROOTHACK], 1, [Assume quota mount options for root filesystem]) COMPILE_OPTS="$COMPILE_OPTS XFS_ROOTHACK" ]) AC_ARG_ENABLE([bsd-behaviour], [AS_HELP_STRING([--disable-bsd-behaviour], [Mimic BSD behaviour])], [enable_bsd_behaviour="$enableval"], [enable_bsd_behaviour=yes] ) AS_IF([test x"$enable_bsd_behaviour" != "xno"], [ AC_DEFINE([BSD_BEHAVIOUR], 1, [Check rights to query / set quotas before calling quotactl]) COMPILE_OPTS="$COMPILE_OPTS BSD_BEHAVIOUR" ]) AC_ARG_WITH([proc-mounts], [AS_HELP_STRING([--with-proc-mounts], [Use alternate mtab file instead of /proc/mounts])], [with_proc_mounts="$withval"], [with_proc_mounts="/proc/mounts"] ) AS_IF([test "$with_proc_mounts" != "no"], [ AC_DEFINE_UNQUOTED([ALT_MTAB], ["$with_proc_mounts"], [File with mounted filesystems]) ]) AC_ARG_WITH([pid-dir], [AS_HELP_STRING([--with-pid-dir=DIRECTORY], [Create PID files in this directory instead of /var/run])], [with_pid_dir="$withval"] ) AS_IF([test "X$with_pid_dir" == "X" -o "$with_pid_dir" == "yes" -o "$with_pid_dir" == "no"],[ with_pid_dir="/var/run" ]) AC_DEFINE_UNQUOTED([PID_DIR], ["$with_pid_dir"], [Directory for PID files]) AC_DEFINE_UNQUOTED([COMPILE_OPTS], ["$COMPILE_OPTS"], [Configuration options]) AC_CONFIG_FILES([ Makefile po/Makefile.in ]) AC_OUTPUT # ============================================== # Display final informations about configuration # ============================================== AC_MSG_NOTICE([ ============================================================================== Build configuration: bsd-behaviour: ${enable_bsd_behaviour} ext2-direct: ${build_ext2direct} ldap-mail: ${build_ldap} libwrap: ${build_libwrap} netlink: ${build_netlink} nls: ${enable_nls} pid-dir: ${with_pid_dir} proc-mounts: ${with_proc_mounts} rpc: ${build_rpc} rpcsetquota: ${enable_rpcsetquota} xfs-roothack: ${enable_xfs_roothack} werror: ${enable_werror} ============================================================================== ]) quota-4.09/convertquota.8000066400000000000000000000027161446321055100154310ustar00rootroot00000000000000.TH CONVERTQUOTA 8 "Fri Aug 20 1999" .UC 4 .SH NAME convertquota \- convert quota from old file format to new one .SH SYNOPSIS .B convertquota [ .B -ug ] .B -e .I filesystem .LP .B convertquota [ .B -ug ] .B -f .IR oldformat , newformat .I filesystem .SH DESCRIPTION .B convertquota converts old quota files .BR quota.user and .BR quota.group to files .BR aquota.user and .BR aquota.group in new format currently used by 2.4.0-ac? and newer or by SuSE or Red Hat Linux 2.4 kernels on .IR filesystem . .PP New file format allows using quotas for 32-bit uids / gids, setting quotas for root, accounting used space in bytes (and so allowing use of quotas in ReiserFS) and it is also architecture independent. This format introduces Radix Tree (a simple form of tree structure) to quota file. .SH OPTIONS .TP .B -u, --user convert user quota file. This is the default. .TP .B -g, --group convert group quota file. .TP .B -f, --convert-format \f2oldformat,newformat\f1 convert quota file from .I oldformat to .IR newformat . .TP .B -e, --convert-endian convert vfsv0 file format from big endian to little endian (old kernels had a bug and did not store quota files in little endian format). .TP .B -V, --version print version information. .SH FILES .TP 20 .B aquota.user new user quota file .TP .B aquota.group new group quota file .SH "SEE ALSO" .BR quota (1), .BR setquota (8), .BR edquota (8), .BR quotacheck (8), .BR quotaon (8), .BR repquota (8) .SH AUTHOR Jan Kara \ quota-4.09/convertquota.c000066400000000000000000000237271446321055100155110ustar00rootroot00000000000000/* * * Utility for converting quota file from old to new format * * Sponsored by SuSE CR */ #include "config.h" #include #include #include #include #include #include #include #include #include "pot.h" #include "common.h" #include "quotaio.h" #include "quotasys.h" #include "quota.h" #include "bylabel.h" #include "quotaio_v2.h" #include "dqblk_v2.h" #define ACT_FORMAT 1 /* Convert format from old to new */ #define ACT_ENDIAN 2 /* Convert endianity */ static char *mntpoint; char *progname; static int ucv, gcv; static struct quota_handle *qn; /* Handle of new file */ static int action; /* Action to be performed */ static int infmt, outfmt; static void usage(void) { errstr(_("Utility for converting quota files.\nUsage:\n\t%s [options] mountpoint\n\n\ -u, --user convert user quota file\n\ -g, --group convert group quota file\n\ -e, --convert-endian convert quota file to correct endianity\n\ -f, --convert-format oldfmt,newfmt convert from old to VFSv0 quota format\n\ -h, --help show this help text and exit\n\ -V, --version output version information and exit\n\n"), progname); errstr(_("Bugs to %s\n"), PACKAGE_BUGREPORT); exit(1); } static inline unsigned int min(unsigned a, unsigned b) { if (a < b) return a; return b; } #define MAX_FMTNAME_LEN 32 static void parse_options(int argcnt, char **argstr) { int ret; struct option long_opts[] = { { "help", 0, NULL, 'h'}, { "version", 0, NULL, 'V'}, { "user", 0, NULL, 'u'}, { "group", 0, NULL, 'g'}, { "convert-endian", 0, NULL, 'e'}, { "convert-format", 1, NULL, 'f'}, { NULL, 0, NULL, 0} }; char *comma; char fmtbuf[MAX_FMTNAME_LEN]; while ((ret = getopt_long(argcnt, argstr, "Vugef:h", long_opts, NULL)) != -1) { switch (ret) { case '?': case 'h': usage(); case 'V': version(); exit(0); case 'u': ucv = 1; break; case 'g': gcv = 1; break; case 'e': action = ACT_ENDIAN; break; case 'f': action = ACT_FORMAT; comma = strchr(optarg, ','); if (!comma) { errstr(_("You have to specify source and target format of conversion.\n")); usage(); } sstrncpy(fmtbuf, optarg, min(comma - optarg + 1, MAX_FMTNAME_LEN)); infmt = name2fmt(fmtbuf); if (infmt == QF_ERROR) usage(); outfmt = name2fmt(comma + 1); if (outfmt == QF_ERROR) usage(); break; } } if (optind + 1 != argcnt) { errstr(_("Bad number of arguments.\n")); usage(); } if (!(ucv | gcv)) ucv = 1; if (!action) { errstr(_("You have to specify action to perform.\n")); usage(); } mntpoint = argstr[optind]; } /* * Implementation of endian conversion */ typedef char *dqbuf_t; #define set_bit(bmp, ind) ((bmp)[(ind) >> 3] |= (1 << ((ind) & 7))) #define get_bit(bmp, ind) ((bmp)[(ind) >> 3] & (1 << ((ind) & 7))) #define getdqbuf() smalloc(QT_BLKSIZE) #define freedqbuf(buf) free(buf) static inline void endian_disk2memdqblk(struct util_dqblk *m, struct v2r0_disk_dqblk *d) { m->dqb_ihardlimit = be32toh(d->dqb_ihardlimit); m->dqb_isoftlimit = be32toh(d->dqb_isoftlimit); m->dqb_bhardlimit = be32toh(d->dqb_bhardlimit); m->dqb_bsoftlimit = be32toh(d->dqb_bsoftlimit); m->dqb_curinodes = be32toh(d->dqb_curinodes); m->dqb_curspace = be64toh(d->dqb_curspace); m->dqb_itime = be64toh(d->dqb_itime); m->dqb_btime = be64toh(d->dqb_btime); } /* Is given dquot empty? */ static int endian_empty_dquot(struct v2r0_disk_dqblk *d) { static struct v2r0_disk_dqblk fakedquot; return !memcmp(d, &fakedquot, sizeof(fakedquot)); } /* Read given block */ static void read_blk(int fd, uint blk, dqbuf_t buf) { int err; lseek(fd, blk << QT_BLKSIZE_BITS, SEEK_SET); err = read(fd, buf, QT_BLKSIZE); if (err < 0) die(2, _("Cannot read block %u: %s\n"), blk, strerror(errno)); else if (err != QT_BLKSIZE) memset(buf + err, 0, QT_BLKSIZE - err); } static void endian_report_block(int fd, uint blk, char *bitmap) { dqbuf_t buf = getdqbuf(); struct qt_disk_dqdbheader *dh; struct v2r0_disk_dqblk *ddata; struct dquot dquot; struct qtree_mem_dqinfo *info = &qn->qh_info.u.v2_mdqi.dqi_qtree; int i; set_bit(bitmap, blk); read_blk(fd, blk, buf); dh = (struct qt_disk_dqdbheader *)buf; ddata = (struct v2r0_disk_dqblk *)(dh + 1); for (i = 0; i < qtree_dqstr_in_blk(info); i++) if (!endian_empty_dquot(ddata + i)) { memset(&dquot, 0, sizeof(dquot)); dquot.dq_h = qn; endian_disk2memdqblk(&dquot.dq_dqb, ddata + i); dquot.dq_id = be32toh(ddata[i].dqb_id); if (qn->qh_ops->commit_dquot(&dquot, COMMIT_ALL) < 0) errstr(_("Cannot commit dquot for id %u: %s\n"), (uint)dquot.dq_id, strerror(errno)); } freedqbuf(buf); } static void endian_report_tree(int fd, uint blk, int depth, char *bitmap) { int i; dqbuf_t buf = getdqbuf(); u_int32_t *ref = (u_int32_t *) buf; read_blk(fd, blk, buf); if (depth == QT_TREEDEPTH - 1) { for (i = 0; i < QT_BLKSIZE >> 2; i++) { blk = be32toh(ref[i]); if (blk && !get_bit(bitmap, blk)) endian_report_block(fd, blk, bitmap); } } else { for (i = 0; i < QT_BLKSIZE >> 2; i++) if ((blk = be32toh(ref[i]))) endian_report_tree(fd, blk, depth + 1, bitmap); } freedqbuf(buf); } static int endian_scan_structures(int fd, int type) { char *bitmap; loff_t blocks = (lseek(fd, 0, SEEK_END) + QT_BLKSIZE - 1) >> QT_BLKSIZE_BITS; bitmap = smalloc((blocks + 7) >> 3); memset(bitmap, 0, (blocks + 7) >> 3); endian_report_tree(fd, QT_TREEOFF, 0, bitmap); free(bitmap); return 0; } static int endian_check_header(int fd, int type) { struct v2_disk_dqheader head; u_int32_t file_magics[] = INITQMAGICS; u_int32_t known_versions[] = INIT_V2_VERSIONS; lseek(fd, 0, SEEK_SET); if (read(fd, &head, sizeof(head)) != sizeof(head)) { errstr(_("Cannot read header of old quotafile.\n")); return -1; } if (be32toh(head.dqh_magic) != file_magics[type] || be32toh(head.dqh_version) > known_versions[type]) { errstr(_("Bad file magic or version (probably not quotafile with bad endianity).\n")); return -1; } return 0; } static int endian_load_info(int fd, int type) { struct v2_disk_dqinfo dinfo; if (read(fd, &dinfo, sizeof(dinfo)) != sizeof(dinfo)) { errstr(_("Cannot read information about old quotafile.\n")); return -1; } qn->qh_info.u.v2_mdqi.dqi_flags = be32toh(dinfo.dqi_flags); qn->qh_info.dqi_bgrace = be32toh(dinfo.dqi_bgrace); qn->qh_info.dqi_igrace = be32toh(dinfo.dqi_igrace); return 0; } /* * End of endian conversion */ static int convert_dquot(struct dquot *dquot, char *name) { struct dquot newdquot; memset(&newdquot, 0, sizeof(newdquot)); newdquot.dq_id = dquot->dq_id; newdquot.dq_h = qn; newdquot.dq_dqb.dqb_ihardlimit = dquot->dq_dqb.dqb_ihardlimit; newdquot.dq_dqb.dqb_isoftlimit = dquot->dq_dqb.dqb_isoftlimit; newdquot.dq_dqb.dqb_curinodes = dquot->dq_dqb.dqb_curinodes; newdquot.dq_dqb.dqb_bhardlimit = dquot->dq_dqb.dqb_bhardlimit; newdquot.dq_dqb.dqb_bsoftlimit = dquot->dq_dqb.dqb_bsoftlimit; newdquot.dq_dqb.dqb_curspace = dquot->dq_dqb.dqb_curspace; newdquot.dq_dqb.dqb_btime = dquot->dq_dqb.dqb_btime; newdquot.dq_dqb.dqb_itime = dquot->dq_dqb.dqb_itime; if (qn->qh_ops->commit_dquot(&newdquot, COMMIT_ALL) < 0) { errstr(_("Cannot commit dquot for id %u: %s\n"), (uint)dquot->dq_id, strerror(errno)); return -1; } return 0; } static int rename_file(int type, int fmt, struct mount_entry *mnt) { char *qfname, namebuf[PATH_MAX]; int ret = 0; if (get_qf_name(mnt, type, fmt, 0, &qfname) < 0) { errstr(_("Cannot get name of new quotafile.\n")); return -1; } strcpy(namebuf, qfname); sstrncat(namebuf, ".new", sizeof(namebuf)); if (rename(namebuf, qfname) < 0) { errstr(_("Cannot rename new quotafile %s to name %s: %s\n"), namebuf, qfname, strerror(errno)); ret = -1; } free(qfname); return ret; } static int convert_format(int type, struct mount_entry *mnt) { struct quota_handle *qo; int ret = 0; if (!(qo = init_io(mnt, type, infmt, IOI_INITSCAN))) { errstr(_("Cannot open old format file for %ss on %s\n"), _(type2name(type)), mnt->me_dir); return -1; } if (!(qn = new_io(mnt, type, outfmt))) { errstr(_("Cannot create file for %ss for new format on %s: %s\n"), _(type2name(type)), mnt->me_dir, strerror(errno)); end_io(qo); return -1; } if (qo->qh_ops->scan_dquots(qo, convert_dquot) >= 0) /* Conversion succeeded? */ ret = rename_file(type, outfmt, mnt); else ret = -1; end_io(qo); end_io(qn); return ret; } static int convert_endian(int type, struct mount_entry *mnt) { int ret = 0; int ofd; char *qfname; if (get_qf_name(mnt, type, QF_VFSV0, NF_EXIST, &qfname) < 0) return -1; if ((ofd = open(qfname, O_RDONLY)) < 0) { errstr(_("Cannot open old quota file on %s: %s\n"), mnt->me_dir, strerror(errno)); free(qfname); return -1; } free(qfname); if (endian_check_header(ofd, type) < 0) { close(ofd); return -1; } if (!(qn = new_io(mnt, type, QF_VFSV0))) { errstr(_("Cannot create file for %ss for new format on %s: %s\n"), type2name(type), mnt->me_dir, strerror(errno)); close(ofd); return -1; } if (endian_load_info(ofd, type) < 0) { end_io(qn); close(ofd); return -1; } ret = endian_scan_structures(ofd, type); end_io(qn); close(ofd); if (ret < 0) return ret; return rename_file(type, QF_VFSV0, mnt); } static int convert_file(int type, struct mount_entry *mnt) { switch (action) { case ACT_FORMAT: return convert_format(type, mnt); case ACT_ENDIAN: return convert_endian(type, mnt); } errstr(_("Unknown action should be performed.\n")); return -1; } int main(int argc, char **argv) { struct mount_entry *mnt; int ret = 0; gettexton(); progname = basename(argv[0]); parse_options(argc, argv); init_kernel_interface(); if (init_mounts_scan(1, &mntpoint, 0) < 0) return 1; if (!(mnt = get_next_mount())) { end_mounts_scan(); return 1; } if (ucv) ret |= convert_file(USRQUOTA, mnt); if (gcv) ret |= convert_file(GRPQUOTA, mnt); end_mounts_scan(); if (ret) return 1; return 0; } quota-4.09/depcomp000077500000000000000000000560171446321055100141660ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 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 outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} 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" # Avoid interferences from the environment. gccflag= dashmflag= # 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 if test "$depmode" = msvc7msys; then # This is just like msvc7 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=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## 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). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # 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. ## 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. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -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 -ne 0; then 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 ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # 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 ;; 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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then 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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then 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,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_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. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool 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$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # 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 ;; #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|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | 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" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | 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::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$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: "UTC0" # time-stamp-end: "; # UTC" # End: quota-4.09/doc/000077500000000000000000000000001446321055100133455ustar00rootroot00000000000000quota-4.09/doc/quotadoc.sgml000066400000000000000000000250271446321055100160560ustar00rootroot00000000000000
Disk quota system for Linux <author>Jan Kara <tt/jack@suse.cz/ <date>2000-2004 <abstract> This document contains documentation of Linux quota disk formats and appropriate quota utilities (currently in version 3.12). </abstract> <!-- Table of contents --> <toc> <!-- Document begins --> <sect>Introduction <label id="intro"> <p> Quota subsystem allows system administrator to set limits on used space and number of used inodes (<it/inode/ is a filesystem structure which is associated which each file or directory) for users and/or groups. For both used space and number of used inodes there are actually two limits. The first one is called <it/softlimit/ and the second one <it/hardlimit/. An user can never exceed a hardlimit for any resource. When an user exceeds a softlimit (s)he is warned that (s)he uses more space than (s)he should but space/inode is allocated (of course only if an user also does not exceed the hardlimit). If an user is exceeding softlimit for specified period of time (this period is called <it/grace time/) (s)he is not allowed to allocate more resources (so (s)he must free some space/inodes to get under softlimit). <p> Quota limits are set independently for each filesystem. Currently following filesystems are supporting quota: Ext2, Ext3, ReiserFS, XFS. <label id="config"> <sect>Configuration <label id="new_quota"> <sect1>Setting up new quota <p> In order for quota subsystem to work you have to have quota compiled in a kernel and configured appropriately. That means that the filesystem on which you want to use quotas must be mounted with quota options so that quota tools recognize the filesystems to work with (and also a filesystem itself might use the information). Currently there are following quota options (note that XFS uses completely different quota system and these information does not apply to it): <itemize> <item><tt/usrquota/ or <tt/quota/ or <tt/usrjquota=filename/ if you want to use limits for users <item><tt/grpquota/ or <tt/grpjquota=filename/ if you want to use limits for groups </itemize> The <tt/usrquota/ and <tt/grpquota/ options have also alternative with <tt/=filename/ appended. <tt/filename/ is then used as a name (together with path) of quota file to use. But note that by this you prevent quota utilities to do some useful autodetection. <tt/jquota/ mount options tell the tools and also the filesystem that it should journal the quota. That basically means that quota on disk is updated together with filesystem's metadata and hence you do not need to run <tt/quotacheck(8)/ after an unclean shutdown. For these options specifying of filename is mandatory (because filesystem also needs to know the file with quota information) and <tt/filename/ must specify a file in the root directory of a filesystem. When any of <tt/jquota/ options is specified additional option <tt/jqfmt=format/ must be also specified where <tt/format/ is a format of quota files. As journaled quota is currently supported only for <tt/vfsv0/ format the value of format must be <tt/vfsv0/. Journaled quota is currently (as of July 2005) supported for Ext3 and Reiserfs filesystems and you need to have at least 2.6.11 kernel. <p> For each filesystem with quotas you have to have files with quota data. The name of these quota files depends on <ref id="quota_formats" name="quota format"> and you can even specify the filenames by yourself by adding <tt/=filename/ to <tt/usrquota/ or <tt/grpquota/ options -- e.g. <tt/usrquota=file.quota/. But note that by this you prevent quota utilities to do some useful autodetection. The quota files can be created by <tt/quotacheck(8)/ utility. When you have successfully created quota files you can turn quotas on (ie. system will start tracking how much each user uses and will check set limits). This is done by <tt/quotaon(8)/ program. <label id="converting_quota"> <sect1>Converting quota formats <p> When you already have working quota subsystem but you want to use newer quota format you have to convert quota files. This can be done by <tt/convertquota(8)/ utility. <label id="setting_limits"> <sect1>Setting user limits <p> You can edit user (group) limits by <tt/edquota(8)/ or <tt/setquota(8)/ programs. By these programs you can also set grace times. <label id="quota_formats"> <sect>Quota formats <label id="quota_format_old"> <sect1>Original quota format <p> Original quota format was the only one available in kernels up to 2.4.21 Linux kernels (note that vendors such as <it/RedHat/ or <it/SuSE/ have included quota format patches into their kernels earlier and use <ref id="quota_format_v0" name="newer quota format">). This quota format is in manpages and quota utils called <tt/vfsold/. <p> Data for this format are usually stored in files <tt/quota.user/ (for user quotas) and <tt/quota.group/ (for group quotas). Both files have the same structure. They are just the arrays of following structures: <code> struct v1_disk_dqblk { u_int32_t dqb_bhardlimit; /* Absolute limit on disk blks alloc */ u_int32_t dqb_bsoftlimit; /* Preferred limit on disk blks */ u_int32_t dqb_curblocks; /* Current block count */ u_int32_t dqb_ihardlimit; /* Maximum # allocated inodes */ u_int32_t dqb_isoftlimit; /* Preferred limit on inodes */ u_int32_t dqb_curinodes; /* Current # allocated inodes */ time_t dqb_btime; /* Time limit for excessive disk use */ time_t dqb_itime; /* Time limit for excessive files */ }; </code> Structure for user (group) with id <tt/N/ is stored as <tt/N/-th structure in file. In fields <tt/dqb_btime/ and <tt/dqb_itime/ of first structure (id = 0) are stored grace times for this filesystem. <label id="quota_format_v0"> <sect1>V0 quota format <p> This quota format is currently available in 2.4.22 and newer kernels. Also kernels distributed by RedHat (>= 7.1) and SuSE (>= 7.2) contain support for this quota format. This format is called <tt/vfsv0/ in manpages and utilities and quota files are usually called <tt/aquota.user/ and <tt/aquota.group/. <p> This quota format has following advantages against old quota format: <itemize> <item>It allows 32-bit UIDs/GIDs. <item>Used space is stored in bytes and so ReiserFS can do precise accounting. <item>UID/GID 0 is no longer special (grace times are stored independently). <item>Header which allows quota format and version detection was added. </itemize> <p> Format of quota file is the following: In the beginning of quota file there is a generic header which is intended to be present in every quota file in future. The header has the following structure: <code> struct disk_dqheader { __u32 dqh_magic; /* Magic number identifying file */ __u32 dqh_version; /* File version */ }; </code> From this header any utility or a kernel code should be able to recognize whether they understand a format of file and eventually refuse to continue. <p> Following header might be specific for quota type and version (currently this header is the same for user and group quota and there is only one version of quota file format). <code> struct disk_dqinfo { __u32 dqi_bgrace; /* Time before block soft limit becomes hard limit - in seconds */ __u32 dqi_igrace; /* Time before inode soft limit becomes hard limit - in seconds */ __u32 dqi_flags; /* Flags for quota file (DQF_*) (currently there are no ondisk flags) */ __u32 dqi_blocks; /* Number of blocks in file */ __u32 dqi_free_blk; /* Number of first free block in the list */ __u32 dqi_free_entry; /* Number of block with at least one free entry */ }; </code> There are two linked lists of blocks in a quota file. The first linked list is used to link all blocks that are completely unused (<tt/dqi_free_blk/ points to the first element of this list). The second linked list is used to link all <it/data blocks/ which have at least one entry free and which also have at least one used entry. The beginning of the list is pointed by <tt/dqi_free_entry/. <p> The rest of a file (starting at 1KB) is divided into 1KB blocks. In these blocks is stored a radix tree with quotas. The key for the radix tree is UID or GID (I will use just ID in the following text) depending on a quota file type. One node of the tree is 1KB block so there are up to 256 references to the sons. At each level we choose reference corresponding to one byte of ID so having four-level radix tree we can support 32-bit IDs. Reference from the last level points to <it/data block/ which contains quota structure for proper ID. <p> <it/Data block/ has following structure: In the beginning there is a header with the following structure: <code> struct disk_dqdbheader { __u32 dqdh_next_free; /* Number of next block with free entry */ __u32 dqdh_prev_free; /* Number of previous block with free entry */ __u16 dqdh_entries; /* Number of valid entries in block */ __u16 dqdh_pad1; __u32 dqdh_pad2; }; </code> Entries <tt/dqdh_next_free/ and <tt/dqdh_prev_free/ are used only if the block has at least one free and one used entry. If it has no free entry these references are set to 0. When block is completely free only <tt/dqdh_next_free/ is used for linked list of free blocks. <p> The rest of the block is divided into 21 quota entries. Unused entry is entry that contains only zeros. Note that used entries might be freely scattered in the block. Quota entry has the following structure: <code> struct disk_dqblk { __u32 dqb_id; /* id this quota applies to */ __u32 dqb_ihardlimit; /* absolute limit on allocated inodes */ __u32 dqb_isoftlimit; /* preferred inode limit */ __u32 dqb_curinodes; /* current # allocated inodes */ __u32 dqb_bhardlimit; /* absolute limit on disk space (in kb) */ __u32 dqb_bsoftlimit; /* preferred limit on disk space (in kb) */ __u64 dqb_curspace; /* current space occupied (in bytes) */ __u64 dqb_btime; /* time limit for excessive disk use */ __u64 dqb_itime; /* time limit for excessive inode use */ }; </code> <label id="utils"> <sect>Utilities <p> As of version 3.01 quota utilities support original, vfsv0 and xfs quota format. You can download latest version of utils from <tt>http://www.sf.net/projects/linuxquota/</tt>. <p> Utils try to do autodetection of currently used quota format (i.e. they detect which format is compiled into kernel and they try to use this one). Anytime you can force utils to use different format by specifying <tt>-F <format></tt>. More information about quota utils can be found in appropriate manpages. </article> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/dqblk_rpc.h������������������������������������������������������������������������������0000664�0000000�0000000�00000001021�14463210551�0014704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Headerfile for rpc quotafile format */ #ifndef GUARD_DQBLK_RPC_H #define GUARD_DQBLK_RPC_H /* Values used for communication through network */ #define Q_RPC_GETQUOTA 0x0300 /* get limits and usage */ #define Q_RPC_SETQUOTA 0x0400 /* set limits and usage */ #define Q_RPC_SETUSE 0x0500 /* set usage */ #define Q_RPC_SETQLIM 0x0700 /* set limits */ #define RPC_DQBLK_SIZE_BITS 10 #define RPC_DQBLK_SIZE (1 << RPC_DQBLK_SIZE_BITS) /* Operations above this format */ extern struct quotafile_ops quotafile_ops_rpc; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/dqblk_v1.h�������������������������������������������������������������������������������0000664�0000000�0000000�00000000675�14463210551�0014464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Headerfile for old quotafile format */ #ifndef GUARD_DQBLK_V1_H #define GUARD_DQBLK_V1_H /* Values of quota calls */ #define Q_V1_RSQUASH 0x1000 #define Q_V1_GETQUOTA 0x300 #define Q_V1_SETQUOTA 0x400 #define Q_V1_SETUSE 0x500 #define Q_V1_SETQLIM 0x700 #define Q_V1_GETSTATS 0x800 struct quotafile_ops; /* Will be defined later in quotaio.h */ /* Operations above this format */ extern struct quotafile_ops quotafile_ops_1; #endif �������������������������������������������������������������������quota-4.09/dqblk_v2.h�������������������������������������������������������������������������������0000664�0000000�0000000�00000002432�14463210551�0014456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Header file for disk format of new quotafile format * */ #ifndef GUARD_DQBLK_V2_H #define GUARD_DQBLK_V2_H #include <sys/types.h> #include <fcntl.h> #include "quota_tree.h" #define Q_V2_GETQUOTA 0x0D00 /* Get limits and usage */ #define Q_V2_SETQUOTA 0x0E00 /* Set limits and usage */ #define Q_V2_SETUSE 0x0F00 /* Set only usage */ #define Q_V2_SETQLIM 0x0700 /* Set only limits */ #define Q_V2_GETINFO 0x0900 /* Get information about quota */ #define Q_V2_SETINFO 0x0A00 /* Set information about quota */ #define Q_V2_SETGRACE 0x0B00 /* Set just grace times in quotafile information */ #define Q_V2_SETFLAGS 0x0C00 /* Set just flags in quotafile information */ #define Q_V2_GETSTATS 0x1100 /* get collected stats (before proc was used) */ /* Structure for format specific information */ struct v2_mem_dqinfo { struct qtree_mem_dqinfo dqi_qtree; uint dqi_flags; /* Flags set in quotafile */ uint dqi_used_entries; /* Number of entries in file - updated by scan_dquots */ uint dqi_data_blocks; /* Number of data blocks in file - updated by scan_dquots */ }; struct v2_mem_dqblk { loff_t dqb_off; /* Offset of dquot in file */ }; struct quotafile_ops; /* Will be defined later in quotaio.h */ /* Operations above this format */ extern struct quotafile_ops quotafile_ops_2; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/dqblk_xfs.h������������������������������������������������������������������������������0000664�0000000�0000000�00000001055�14463210551�0014727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Headerfile for XFS quota format */ #ifndef GUARD_DQBLK_XFS_H #define GUARD_DQBLK_XFS_H #include "quotaio_xfs.h" #define Q_XFS_QUOTAON Q_XQUOTAON #define Q_XFS_QUOTAOFF Q_XQUOTAOFF #define Q_XFS_GETQUOTA Q_XGETQUOTA #define Q_XFS_SETQLIM Q_XSETQLIM #define Q_XFS_GETQSTAT Q_XGETQSTAT #define Q_XFS_QUOTARM Q_XQUOTARM #define xfs_mem_dqinfo fs_quota_stat #define xfs_kern_dqblk fs_disk_quota struct quotafile_ops; /* Will be defined later in quotaio.h */ /* Operations above this format */ extern struct quotafile_ops quotafile_ops_xfs; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/edquota.8��������������������������������������������������������������������������������0000664�0000000�0000000�00000012341�14463210551�0014334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH EDQUOTA 8 .SH NAME edquota \- edit user quotas .SH SYNOPSIS .B edquota [ .B \-p .I protoname ] [ .BR \-u \ | .BR \-g \ | .B \-P ] [ .B \-rm ] [ .B \-F .I format-name ] [ .B \-f .I filesystem ] .IR username \ | .IR groupname \ | .IR projectname .\|.\|. .LP .B edquota [ .BR \-u \ | .BR \-g \ | .B \-P ] [ .B \-F .I format-name ] [ .B \-f .I filesystem ] .B \-t .LP .B edquota [ .BR \-u \ | .BR \-g \ | .B \-P ] [ .B \-F .I format-name ] [ .B \-f .I filesystem ] .B \-T .IR username \ | .IR groupname \ | .IR projectname .\|.\|. .SH DESCRIPTION .IX "edquota command" "" "\fLedquota\fP \(em edit user quotas" .IX edit "user quotas \(em \fLedquota\fP" .IX "user quotas" "edquota command" "" "\fLedquota\fP \(em edit user quotas" .IX "disk quotas" "edquota command" "" "\fLedquota\fP \(em edit user quotas" .IX "quotas" "edquota command" "" "\fLedquota\fP \(em edit user quotas" .IX "filesystem" "edquota command" "" "\fLedquota\fP \(em edit user quotas" .B edquota is a quota editor. One or more users, groups, or projects may be specified on the command line. If a number is given in the place of user/group/project name it is treated as an UID/GID/Project ID. For each user, group, or project a temporary file is created with an .SM ASCII representation of the current disk quotas for that user, group, or project and an editor is then invoked on the file. The quotas may then be modified, new quotas added, etc. Setting a quota to zero indicates that no quota should be imposed. .PP Block usage and limits are reported and interpreted as multiples of kibibyte (1024 bytes) blocks by default. Symbols K, M, G, and T can be appended to numeric value to express kibibytes, mebibytes, gibibytes, and tebibytes. .PP Inode usage and limits are interpreted literally. Symbols k, m, g, and t can be appended to numeric value to express multiples of 10^3, 10^6, 10^9, and 10^12 inodes. .PP Users are permitted to exceed their soft limits for a grace period that may be specified per filesystem. Once the grace period has expired, the soft limit is enforced as a hard limit. .PP The current usage information in the file is for informational purposes; only the hard and soft limits can be changed. .PP Upon leaving the editor, .B edquota reads the temporary file and modifies the binary quota files to reflect the changes made. .LP The editor invoked is .BR vi (1) unless either the .SB EDITOR or the .SB VISUAL environment variable specifies otherwise. .LP Only the super-user may edit quotas. .SH OPTIONS .TP .B -r, --remote Edit also non-local quota use rpc.rquotad on remote server to set quota. This option is available only if quota tools were compiled with enabled support for setting quotas over RPC. The .B -n option is equivalent, and is maintained for backward compatibility. .TP .B -m, --no-mixed-pathnames Currently, pathnames of NFSv4 mountpoints are sent without leading slash in the path. .BR rpc.rquotad uses this to recognize NFSv4 mounts and properly prepend pseudoroot of NFS filesystem to the path. If you specify this option, .BR edquota will always send paths with a leading slash. This can be useful for legacy reasons but be aware that quota over RPC will stop working if you are using new .BR rpc.rquotad . .TP .B -u, --user Edit the user quota. This is the default. .TP .B -g, --group Edit the group quota. .TP .B -P, --project Edit the project quota. .TP .B -p, --prototype=\f2protoname\f1 Duplicate the quotas of the prototypical user specified for each user specified. This is the normal mechanism used to initialize quotas for groups of users. .TP .B --always-resolve Always try to translate user / group name to uid / gid even if the name is composed of digits only. .TP .B -F, --format=\f2format-name\f1 Edit quota for specified format (ie. don't perform format autodetection). Possible format names are: .B vfsold Original quota format with 16-bit UIDs / GIDs, .B vfsv0 Quota format with 32-bit UIDs / GIDs, 64-bit space usage, 32-bit inode usage and limits, .B vfsv1 Quota format with 64-bit quota limits and usage, .B rpc (quota over NFS), .B xfs (quota on XFS filesystem) .TP .B \-f, --filesystem \f2filesystem\f1 Perform specified operations only for given filesystem (default is to perform operations for all filesystems with quota). .TP .B \-t, --edit-period Edit the soft time limits for each filesystem. In old quota format if the time limits are zero, the default time limits in .B <linux/quota.h> are used. In new quota format time limits must be specified (there is no default value set in kernel). Time units of 'seconds', 'minutes', 'hours', and 'days' are understood. Time limits are printed in the greatest possible time unit such that the value is greater than or equal to one. .TP .B \-T, --edit-times Edit time for the user/group/project when softlimit is enforced. Possible values are 'unset' or number and unit. Units are the same as in .B \-t option. .SH FILES .PD 0 .TP 20 .BR aquota.user " or " aquota.group quota file at the filesystem root (version 2 quota, non-XFS filesystems) .TP .BR quota.user " or " quota.group quota file at the filesystem root (version 1 quota, non-XFS filesystems) .TP .B /etc/mtab mounted filesystems table .PD .SH SEE ALSO .BR quota (1), .BR vi (1), .BR quotactl (2), .BR quotacheck (8), .BR quotaon (8), .BR repquota (8), .BR setquota (8) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/edquota.c��������������������������������������������������������������������������������0000664�0000000�0000000�00000023141�14463210551�0014407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Tool to edit quota limits via editor */ #include "config.h" /* * Disk quota editor. */ #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <pwd.h> #include <grp.h> #include <ctype.h> #include <stdio.h> #include <string.h> #include <signal.h> #include <unistd.h> #include <paths.h> #include <stdlib.h> #include <fcntl.h> #include <getopt.h> #include "pot.h" #include "quotaops.h" #include "quotasys.h" #include "quotaio.h" #include "common.h" #define FL_EDIT_PERIOD 1 #define FL_EDIT_TIMES 2 #define FL_REMOTE 4 #define FL_NUMNAMES 8 #define FL_NO_MIXED_PATHS 16 char *progname; static int flags, quotatype; static int fmt = -1; static char *protoname; static char *dirname; static void usage(void) { #if defined(RPC_SETQUOTA) char *rpcflag = "[-rm] "; #else char *rpcflag = ""; #endif errstr(_("Usage:\n\tedquota %1$s[-u] [-F formatname] [-p username] [-f filesystem] username ...\n\ \tedquota %1$s-g [-F formatname] [-p groupname] [-f filesystem] groupname ...\n\ \tedquota %1$s-P [-F formatname] [-p projectname] [-f filesystem] projectname ...\n\ \tedquota [-u|g|-P] [-F formatname] [-f filesystem] -t\n\ \tedquota [-u|g|-P] [-F formatname] [-f filesystem] -T username|groupname|projectname ...\n"), rpcflag); fputs(_("\n\ -u, --user edit user data\n\ -g, --group edit group data\n\ -P, --project edit project data\n\ "), stderr); #if defined(RPC_SETQUOTA) fputs(_("-r, --remote edit remote quota (via RPC)\n\ -m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n"), stderr); #endif fputs(_("-F, --format=formatname edit quotas of a specific format\n\ -p, --prototype=name copy data from a prototype user/group\n\ --always-resolve always try to resolve name, even if it is\n\ composed only of digits\n\ -f, --filesystem=filesystem edit data only on a specific filesystem\n\ -t, --edit-period edit grace period\n\ -T, --edit-times edit grace time of a user/group\n\ -h, --help display this help text and exit\n\ -V, --version display version information and exit\n\n"), stderr); fprintf(stderr, _("Bugs to: %s\n"), PACKAGE_BUGREPORT); exit(1); } static int parse_options(int argc, char **argv) { int ret; struct option long_opts[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, { "prototype", 1, NULL, 'p' }, { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "project", 0, NULL, 'P' }, { "format", 1, NULL, 'F' }, { "filesystem", 1, NULL, 'f' }, #if defined(RPC_SETQUOTA) { "remote", 0, NULL, 'r' }, { "no-mixed-pathnames", 0, NULL, 'm' }, #endif { "always-resolve", 0, NULL, 256 }, { "edit-period", 0, NULL, 't' }, { "edit-times", 0, NULL, 'T' }, { NULL, 0, NULL, 0 } }; if (argc < 2) usage(); quotatype = USRQUOTA; #if defined(RPC_SETQUOTA) while ((ret = getopt_long(argc, argv, "ugPhrmntTVp:F:f:", long_opts, NULL)) != -1) { #else while ((ret = getopt_long(argc, argv, "ugPhtTVp:F:f:", long_opts, NULL)) != -1) { #endif switch (ret) { case 'p': protoname = optarg; break; case 'g': quotatype = GRPQUOTA; break; case 'P': quotatype = PRJQUOTA; break; #if defined(RPC_SETQUOTA) case 'n': case 'r': flags |= FL_REMOTE; break; case 'm': flags |= FL_NO_MIXED_PATHS; break; #endif case 'u': quotatype = USRQUOTA; break; case 't': flags |= FL_EDIT_PERIOD; break; case 'T': flags |= FL_EDIT_TIMES; break; case 'F': if ((fmt = name2fmt(optarg)) == QF_ERROR) /* Error? */ exit(1); break; case 'f': dirname = optarg; break; case 256: flags |= FL_NUMNAMES; break; case 'V': version(); exit(0); case 'h': default: usage(); } } argc -= optind; if (((flags & FL_EDIT_PERIOD) && argc != 0) || ((flags & FL_EDIT_TIMES) && argc < 1)) usage(); if ((flags & (FL_EDIT_PERIOD | FL_EDIT_TIMES)) && protoname) { errstr(_("Prototype name does not make sense when editing grace period or times.\n")); usage(); } if (flags & FL_REMOTE && (flags & (FL_EDIT_TIMES | FL_EDIT_PERIOD))) { errstr(_("Cannot change grace times over RPC protocol.\n")); usage(); } return optind; } static void copy_prototype(int argc, char **argv, struct quota_handle **handles) { int ret, protoid, id; struct dquot *protoprivs, *curprivs, *pprivs, *cprivs; ret = 0; protoid = name2id(protoname, quotatype, !!(flags & FL_NUMNAMES), NULL); protoprivs = getprivs(protoid, handles, 0); while (argc-- > 0) { id = name2id(*argv, quotatype, !!(flags & FL_NUMNAMES), NULL); curprivs = getprivs(id, handles, !dirname); if (!curprivs) die(1, _("Cannot get quota information for user %s\n"), *argv); argv++; for (pprivs = protoprivs, cprivs = curprivs; pprivs && cprivs; pprivs = pprivs->dq_next, cprivs = cprivs->dq_next) { if (!devcmp_handles(pprivs->dq_h, cprivs->dq_h)) { errstr(_("fsname mismatch\n")); continue; } cprivs->dq_dqb.dqb_bsoftlimit = pprivs->dq_dqb.dqb_bsoftlimit; cprivs->dq_dqb.dqb_bhardlimit = pprivs->dq_dqb.dqb_bhardlimit; cprivs->dq_dqb.dqb_isoftlimit = pprivs->dq_dqb.dqb_isoftlimit; cprivs->dq_dqb.dqb_ihardlimit = pprivs->dq_dqb.dqb_ihardlimit; update_grace_times(cprivs); } if (putprivs(curprivs, COMMIT_LIMITS) == -1) ret = -1; freeprivs(curprivs); } if (dispose_handle_list(handles) == -1) ret = -1; freeprivs(protoprivs); exit(ret ? 1 : 0); } int main(int argc, char **argv) { struct dquot *curprivs; int tmpfd, ret, id; struct quota_handle **handles; char *tmpfil, *tmpdir = NULL; struct stat st; struct timespec mtime; gettexton(); progname = basename(argv[0]); ret = parse_options(argc, argv); argc -= ret; argv += ret; init_kernel_interface(); handles = create_handle_list(dirname ? 1 : 0, dirname ? &dirname : NULL, quotatype, fmt, (flags & FL_NO_MIXED_PATHS) ? 0 : IOI_NFS_MIXED_PATHS, (flags & FL_REMOTE) ? 0 : MS_LOCALONLY); if (!handles[0]) { dispose_handle_list(handles); fputs(_("No filesystems with quota detected.\n"), stderr); return 0; } if (protoname) copy_prototype(argc, argv, handles); umask(077); if (getuid() == geteuid() && getgid() == getegid()) tmpdir = getenv("TMPDIR"); if (!tmpdir) tmpdir = _PATH_TMP; tmpfil = smalloc(strlen(tmpdir) + strlen("/EdP.aXXXXXX") + 1); strcpy(tmpfil, tmpdir); strcat(tmpfil, "/EdP.aXXXXXX"); tmpfd = mkstemp(tmpfil); if (tmpfd < 0) { errstr(_("Cannot create temporary file: %s\n"), strerror(errno)); ret = -1; goto out; } if (fchown(tmpfd, getuid(), getgid()) < 0) { errstr(_("Cannot change owner of temporary file: %s\n"), strerror(errno)); ret = -1; goto out; } ret = 0; if (flags & FL_EDIT_PERIOD) { if (writetimes(handles, tmpfd) < 0) { errstr(_("Cannot write grace times to file.\n")); ret = -1; goto out; } if (stat(tmpfil, &st) < 0) { errstr(_("Cannot stat file with times.\n")); ret = -1; goto out; } mtime = st.st_mtim; if (editprivs(tmpfil) < 0) { errstr(_("Error while editing grace times.\n")); ret = -1; goto out; } close(tmpfd); /* * Reopen the file since editor may have written the * file in a new place. Open in rw mode because we can * reuse the file for editting the next user as well. */ if ((tmpfd = open(tmpfil, O_RDWR)) < 0) die(1, _("Cannot reopen!\n")); if (stat(tmpfil, &st) < 0) { errstr(_("Cannot stat file with times.\n")); ret = -1; goto out; } /* File not modified? */ if (timespec_cmp(&mtime, &st.st_mtim) == 0) goto out; if (readtimes(handles, tmpfd) < 0) { errstr(_("Failed to parse grace times file.\n")); ret = -1; goto out; } } else { for (; argc > 0; argc--, argv++) { id = name2id(*argv, quotatype, !!(flags & FL_NUMNAMES), NULL); curprivs = getprivs(id, handles, !dirname); if (!curprivs) die(1, _("Cannot get quota information for user %s.\n"), *argv); if (flags & FL_EDIT_TIMES) { if (writeindividualtimes(curprivs, tmpfd, *argv, quotatype) < 0) { errstr(_("Cannot write individual grace times to file.\n")); ret = -1; goto next_user; } } else { if (writeprivs(curprivs, tmpfd, *argv, quotatype) < 0) { errstr(_("Cannot write quotas to file.\n")); ret = -1; goto next_user; } } if (stat(tmpfil, &st) < 0) { errstr(_("Cannot stat file with times.\n")); ret = -1; goto out; } mtime = st.st_mtim; if (editprivs(tmpfil) < 0) { errstr(_("Error while editing quotas.\n")); ret = -1; goto next_user; } close(tmpfd); /* * Reopen the file since editor may have written the * file in a new place. Open in rw mode because we can * reuse the file for editting the next user as well. */ if ((tmpfd = open(tmpfil, O_RDWR)) < 0) die(1, _("Cannot reopen!\n")); if (stat(tmpfil, &st) < 0) { errstr(_("Cannot stat file with times.\n")); ret = -1; goto next_user; } /* File not modified? */ if (timespec_cmp(&mtime, &st.st_mtim) == 0) goto next_user; if (flags & FL_EDIT_TIMES) { if (readindividualtimes(curprivs, tmpfd) < 0) { errstr(_("Cannot read individual grace times from file.\n")); ret = -1; goto next_user; } } else { if (readprivs(curprivs, tmpfd) < 0) { errstr(_("Cannot read quotas from file.\n")); ret = -1; goto next_user; } } if (putprivs(curprivs, COMMIT_LIMITS) == -1) ret = -1; next_user: freeprivs(curprivs); } } out: if (dispose_handle_list(handles) == -1) ret = -1; close(tmpfd); unlink(tmpfil); free(tmpfil); return ret ? 1 : 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/install-sh�������������������������������������������������������������������������������0000775�0000000�0000000�00000034524�14463210551�0014614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2016-01-11.22; # 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. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # 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_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 is_target_a_directory=possibly 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 *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi 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 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac 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 if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 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 problematic for 'test' and other utilities. 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 # 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 "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` 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-writable 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 oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && 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` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && 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: "UTC0" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/ldap-scripts/����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14463210551�0015205�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/ldap-scripts/applySystemQuotas.pl��������������������������������������������������������0000775�0000000�0000000�00000006235�14463210551�0021302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl -w # $0 -b "ou=People,dc=borgia,dc=com" -F '(attr=value)' # Synopsis # applyQuotas.pl is a script solely for making the quota set within LDAP take # affect by running the linuxquota tool edquota with the figures set in LDAP. # This tool is capable of applying standard LDAP filters to the user-supplied # base DN for applying multiple users' quotas at once. # Examples: # Apply the quotas using the linuxquota tool edquota for user stefan # ./applySystemQuotas.pl -b "uid=stefan,ou=People,dc=borgia,dc=com" # # Apply the quotas using the linuxquota tool edquota for all People with description of Student # ./applySystemQuotas.pl -b "ou=People,dc=borgia,dc=com" -F "(description=Student)" use strict; use Net::LDAP; use Getopt::Long; chomp(my $Password = `cat /etc/ldap.secret`); my $Host = 'localhost'; my $Port = '389'; my $BindDN = 'cn=Manager,dc=borgia,dc=com'; my $SSL = 0; my $edquota_editor = '/usr/sbin/edquota_editor'; my $edquota = '/usr/sbin/edquota'; my $b = ''; my $F = ''; GetOptions( 'b=s' => \$b, 'F=s' => \$F, ); die "Usage: $0 -b basedn [-F '(extrafilter)']\n" unless $b; my $ldap = connectLDAP(); my $search; $search = $ldap->search( base => $b, filter => "(&(objectClass=systemQuotas)$F)", attrs => ['uid', 'quota'], ); $search->code && die $search->error; my $i = 0; my $max = $search->count; for ( $i=0; $i<$max; $i++ ) { my $entry = $search->entry($i); my $editor = $ENV{'VISUAL'} if $ENV{'VISUAL'}; $ENV{'VISUAL'} = $edquota_editor; $ENV{'QUOTA_USER'} = $entry->get_value('uid'); # Delete all existing quotas for QUOTA_USER $ENV{'QUOTA_FILESYS'} = '*'; $ENV{'QUOTA_SBLOCKS'} = 0; $ENV{'QUOTA_HBLOCKS'} = 0; $ENV{'QUOTA_SFILES'} = 0; $ENV{'QUOTA_HFILES'} = 0; print "$ENV{'QUOTA_USER'}: $ENV{'QUOTA_FILESYS'}:$ENV{'QUOTA_SBLOCKS'},$ENV{'QUOTA_HBLOCKS'},$ENV{'QUOTA_SFILES'},$ENV{'QUOTA_HFILES'}\n"; qx(/usr/sbin/edquota -u $ENV{'QUOTA_USER'}); my @quotas = $entry->get_value('quota'); if ( $#quotas >= 0 ) { foreach ( @quotas ) { my @quota = split /:/; $ENV{'QUOTA_FILESYS'} = $quota[0]; $ENV{'QUOTA_SBLOCKS'} = $quota[1]; $ENV{'QUOTA_HBLOCKS'} = $quota[2]; $ENV{'QUOTA_SFILES'} = $quota[3]; $ENV{'QUOTA_HFILES'} = $quota[4]; print "$ENV{'QUOTA_USER'}: $ENV{'QUOTA_FILESYS'}:$ENV{'QUOTA_SBLOCKS'},$ENV{'QUOTA_HBLOCKS'},$ENV{'QUOTA_SFILES'},$ENV{'QUOTA_HFILES'}\n"; qx($edquota -u $ENV{'QUOTA_USER'}); } } if ($editor) { $ENV{'VISUAL'} = $editor; } else { delete $ENV{'VISUAL'}; } } $search = $ldap->unbind; sub connectLDAP { # bind to a directory with dn and password my $ldap = Net::LDAP->new( $Host, port => $Port, version => 3, # debug => 0xffff, ) or die "Can't contact LDAP server ($@)\n"; if ( $SSL ) { $ldap->start_tls( # verify => 'require', # clientcert => 'mycert.pem', # clientkey => 'mykey.pem', # decryptkey => sub { 'secret'; }, # capath => '/usr/local/cacerts/' ); } $ldap->bind($BindDN, password=>$Password); return $ldap; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/ldap-scripts/edquota_editor��������������������������������������������������������������0000775�0000000�0000000�00000002333�14463210551�0020144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl -w use strict; die "QUOTA_USER environment variable not set\n" unless defined $ENV{'QUOTA_USER'}; die "QUOTA_FILESYS environment variable not set\n" unless defined $ENV{'QUOTA_FILESYS'}; die "QUOTA_SBLOCKS environment variable not set\n" unless defined $ENV{'QUOTA_SBLOCKS'}; die "QUOTA_HBLOCKS environment variable not set\n" unless defined $ENV{'QUOTA_HBLOCKS'}; die "QUOTA_SFILES environment variable not set\n" unless defined $ENV{'QUOTA_SFILES'}; die "QUOTA_HFILES environment variable not set\n" unless defined $ENV{'QUOTA_HFILES'}; open FILE, $ARGV[0]; my $qdata = join '', (@_=<FILE>); close FILE; open FILE, ">$ARGV[0]"; print FILE &edit_quota_file($qdata, $ENV{'QUOTA_FILESYS'}, $ENV{'QUOTA_SBLOCKS'}, $ENV{'QUOTA_HBLOCKS'}, $ENV{'QUOTA_SFILES'}, $ENV{'QUOTA_HFILES'}); close FILE; # edit_quota_file(data, filesys, sblocks, hblocks, sfiles, hfiles) sub edit_quota_file { my($rv, $line, @line, $i); @line = split /\n/, $_[0]; for ( $i=0; $i<@line; $i++ ) { if ($line[$i] =~ /^\s+(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/ && ($1 eq $_[1] || $_[1] eq '*')) { # new-style line to change $rv .= " $1 $2 $_[2] $_[3] $5 $_[4] $_[5]\n"; } else { $rv .= "$line[$i]\n"; } } return $rv; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/ldap-scripts/quota.schema����������������������������������������������������������������0000664�0000000�0000000�00000001050�14463210551�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## ## schema file for Unix Quotas ## Schema for storing Unix Quotas in LDAP ## OIDs are owned by Cogent Innovators, LLC ## ## 1.3.6.1.4.1.19937.1.1.x - attributetypes ## 1.3.6.1.4.1.19937.1.2.x - objectclasses ## attributetype ( 1.3.6.1.4.1.19937.1.1.1 NAME 'quota' DESC 'Quotas (FileSystem:BlocksSoft,BlocksHard,InodesSoft,InodesHard)' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} ) objectclass ( 1.3.6.1.4.1.19937.1.2.1 NAME 'systemQuotas' SUP posixAccount AUXILIARY DESC 'System Quotas' MUST ( uid ) MAY ( quota )) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/ldap-scripts/setSystemQuotas.pl����������������������������������������������������������0000775�0000000�0000000�00000007532�14463210551�0020751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl -w # $0 -b "ou=People,dc=borgia,dc=com" -Q /dev/with/quota=0:0:0:0 -F '(attr=value)' # Synopsis # setSystemQuotas.pl is a script solely for modifying the quota attribute in # LDAP. It expects that the users you intend to have quotas already have the # systemQuotas objectClass set. # This tool is capable of applying standard LDAP filters to the user-supplied # base DN for modifying multiple users' quotas at once. # Examples: # Set quota on /dev/sda7 and /dev/sda8 for user stefan # ./setSystemQuotas.pl -b "uid=stefan,ou=People,dc=borgia,dc=com" -Q /dev/sda7=4000000:4400000:10000:11000 -Q /dev/sda8=4000000:4400000:10000:11000 # # Set quota on /dev/sda8 for user all People with description of Student # ./setSystemQuotas.pl -b "ou=People,dc=borgia,dc=com" -Q /dev/sda8=40000:44000:1000:1100 -F "(description=Student)" # # Delete quotas for user stefan # ./setSystemQuotas.pl -b "uid=stefan,ou=People,dc=borgia,dc=com" use strict; use Net::LDAP; use Getopt::Long; chomp(my $Password = `cat /etc/ldap.secret`); my $Host = 'localhost'; my $Port = '389'; my $BindDN = 'cn=Manager,dc=borgia,dc=com'; my $SSL = 0; my $b = ''; my %Q = (); my $F = ''; GetOptions( 'b=s' => \$b, 'Q=s' => \%Q, 'F=s' => \$F, ); die "Usage: $0 -b userdn [-F '(extrafilter)'] [-Q /fs=sb:hb:sf:hf ...]\n" unless $b; foreach ( keys %Q ) { local @_ = split /:/, $Q{$_}; unless ( $#_ == 3 ) { print "Ignoring $_: invalid format\n"; delete $Q{$_}; } } my $ldap = connectLDAP(); my $quota = {}; my $search; $search = $ldap->search( base => $b, filter => "(&(objectClass=systemQuotas)$F)", attrs => ['*', 'quota'], ); $search->code && die $search->error; my $i = 0; my $max = $search->count; for ( $i=0; $i<$max; $i++ ) { my $entry = $search->entry($i); my $dn = $entry->dn; if ( keys %Q ) { $quota->{$dn} = 1; foreach ( $entry->get_value('quota') ) { my @quota = split /:/; my $fs = shift @quota; delete $quota->{$dn} if $quota->{$dn} == 1; $quota->{$dn}->{$fs} = join ':', @quota; } } else { $quota->{$dn} = 0; delete $quota->{$dn} unless $entry->get_value('quota'); } } foreach my $dn ( keys %{$quota} ) { if ( ref $quota->{$dn} eq 'HASH' ) { print STDERR "Modify $dn:\n"; foreach ( keys %Q ) { print STDERR "\t$_:$Q{$_}\n"; $quota->{$dn}->{$_} = $Q{$_}; } my @quota = map { "$_:$quota->{$dn}->{$_}" } keys %{$quota->{$dn}}; my $modify = $ldap->modify( $dn, replace => { quota => [@quota], }, ); $modify->code && warn "Failed to modify quota: ", $modify->error, "\n"; } else { if ( $quota->{$dn} == 1 ) { delete $quota->{$dn}; print STDERR "Add $dn:\n"; foreach ( keys %Q ) { print STDERR "\t$_:$Q{$_}\n"; $quota->{$dn}->{$_} = $Q{$_} } my @quota = map { "$_:$quota->{$dn}->{$_}" } keys %{$quota->{$dn}}; my $modify = $ldap->modify( $dn, add => { quota => [@quota], }, ); $modify->code && warn "Failed to modify quota: ", $modify->error, "\n"; } elsif ( $quota->{$dn} == 0 ) { print STDERR "Delete $dn:\n"; my $modify = $ldap->modify( $dn, delete => ['quota'], ); $modify->code && warn "Failed to modify quota: ", $modify->error, "\n"; } } } $ldap->unbind; sub connectLDAP { # bind to a directory with dn and password my $ldap = Net::LDAP->new( $Host, port => $Port, version => 3, # debug => 0xffff, ) or die "Can't contact LDAP server ($@)\n"; if ( $SSL ) { $ldap->start_tls( # verify => 'require', # clientcert => 'mycert.pem', # clientkey => 'mykey.pem', # decryptkey => sub { 'secret'; }, # capath => '/usr/local/cacerts/' ); } $ldap->bind($BindDN, password=>$Password); return $ldap; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/ldap-scripts/setquota-ldap.pl������������������������������������������������������������0000664�0000000�0000000�00000013627�14463210551�0020336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl # A Perl wrapper for setquota utility which updates LDAP accordingly. # /etc/fstab: usrquota,grpquota # mount -o remount /f/s # touch /f/s/aquota.{user,group} # chmod 600 /f/s/aquota.{user,group} # quotacheck -cguvamf use strict; use warnings; use Net::LDAP; use Net::LDAP::Entry; use Getopt::Long; Getopt::Long::Configure ("bundling"); my $help = $#ARGV >= 0 ? 0 : 1; my $ldaphost = 'localhost'; my $passwordfile = ''; my $password = ''; my $binddn = $ENV{BINDDN}; my $basedn = $ENV{BASEDN}; my $oc = 'systemQuotas'; my $attr = 'quota'; my %Q = (); my $F = 'cn=*'; GetOptions( 'help|?' => \$help, 'oc|o=s' => \$oc, 'attr|a=s' => \$attr, 'quota|Q=s' => \%Q, 'filter|F=s' => \$F, 'ldaphost|h=s' => \$ldaphost, 'basedn|b=s' => \$basedn, 'binddn|D=s' => \$binddn, 'password|w=s' => \$password, 'passwordfile|W=s' => \$passwordfile, ); die "Usage: $0 -b basedn [-o objectClass] [-a attr] [-F '(extrafilter)'] [-Q /f/s=sb:hb:gb:sf:hf:gf ...]\n" if $help; %Q = checkQ(%Q); my ($ldap, $bind); if ( $ldap = Net::LDAP->new($ldaphost, version => 3, timeout => 3) ) { if ( $binddn && $password ) { $bind = $ldap->bind($binddn, password=>$password); } elsif ( $binddn && $passwordfile ){ $bind = $ldap->bind($binddn, password=>bindpw($passwordfile)); } else { $bind = $ldap->bind(); } die "Unable to connect to LDAP\n" if $bind->code; undef $passwordfile; } else { die "Unable to connect to LDAP\n"; } my $search = $ARGV[0] ? $ldap->search(base=>$basedn, filter=>"uid=$ARGV[0]") : $ldap->search(base=>$basedn, filter=>$F); if ( $search->code ) { die "LDAP Error: ", error($search), "\n"; } elsif ( $search->count <= 0 ) { die "0 results found in LDAP\n"; } else { my $i = 0; for ( $i=0; $i<$search->count; $i++ ) { my $entry = $search->entry($i); my @oc = $entry->get_value('objectClass'); # objectClass: $oc unless ( grep { /^$oc$/ } @oc ) { my $modify = $ldap->modify($entry->dn, add => {objectClass => $oc}); if ( $modify->code ) { print STDERR "Failed to add objectClass $oc:", error($modify), "\n"; } } # $attr: /f/s=sb:hb:sf:hf if ( $entry->exists($attr) ) { my @attr = $entry->get_value($attr); if ( keys %Q ) { foreach my $fs ( keys %Q ) { foreach ( @attr ) { next unless /^$fs=/; my $modify = $ldap->modify($entry->dn, delete => {$attr => "$_"}); if ( $modify->code ) { print STDERR "Failed to delete $attr: $_: ", error($modify), "\n"; } } my $modify = $ldap->modify($entry->dn, add => {$attr => "$fs=$Q{$fs}"}); if ( $modify->code ) { print STDERR "Failed to add $attr: $fs=$Q{$fs}: ", error($modify), "\n"; } else { print STDERR "Failed to setquota: $fs=$Q{$fs}\n" if setquota($entry->get_value('uid'), $fs, $Q{$fs}); } } } else { my $modify = $ldap->modify($entry->dn, delete => [($attr)]); if ( $modify->code ) { print STDERR "Failed to delete $attr: ", error($modify), "\n"; } else { foreach ( @attr ) { my ($fs) = m!^(/[^=]*)!; $Q{$fs} = '0:0:0:0:0:0'; print STDERR "Failed to setquota: $fs=$Q{$fs}\n" if setquota($entry->get_value('uid'), $fs, $Q{$fs}); } } } } else { if ( keys %Q ) { foreach my $fs ( keys %Q ) { my $modify = $ldap->modify($entry->dn, add => {$attr => "$fs=$Q{$fs}"}); if ( $modify->code ) { print STDERR "Failed to add $attr: $fs=$Q{$fs}: ", error($modify), "\n"; } else { print STDERR "Failed to setquota: $fs=$Q{$fs}\n" if setquota($entry->get_value('uid'), $fs, $Q{$fs}); } } } } } } sub setquota { $_[2] = '0:0:0:0:0:0' unless $_[2]; $_[2] =~ /^(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)$/; qx{/usr/sbin/setquota -u $_[0] $1 $2 $4 $5 $_[1]}; qx{/usr/sbin/setquota -T -u $_[0] $3 $6 $_[1]}; return 0; } sub checkQ { my (%Q) = @_; foreach ( keys %Q ) { die "$_: invalid format\n" unless m!^(/[^=]*)! && $Q{$_} =~ /^(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)$/; } return %Q; } sub bindpw { my ($passwordfile) = @_; open P, $passwordfile or die "Can't open passwordfile: $!"; chomp(my $password = <P>); close P; return $password; } sub error { return $_[0]->error, "(", $_[0]->code, ")"; } ���������������������������������������������������������������������������������������������������������quota-4.09/m4/��������������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14463210551�0013120�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/m4/gettext.m4����������������������������������������������������������������������������0000664�0000000�0000000�00000040521�14463210551�0015050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettext.m4 serial 20 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl 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 <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. 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 <inttypes.h> 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 Set USE_NLS. 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 <libintl.h> ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) 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 <libintl.h> ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], 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 <libintl.h> ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], [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" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi 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 "$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. 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_MKINSTALLDIRS])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_CONST])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([jm_GLIBC21])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \ __fsetlocking]) AM_ICONV AM_LANGINFO_CODESET if test $ac_cv_header_locale_h = yes; then AM_LC_MESSAGES 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 Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/m4/iconv.m4������������������������������������������������������������������������������0000664�0000000�0000000�00000006653�14463210551�0014512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv.m4 serial AM4 (gettext-0.11.3) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From 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 <stdlib.h> #include <iconv.h>], [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 <stdlib.h> #include <iconv.h>], [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 <stdlib.h> #include <iconv.h> 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 ]) �������������������������������������������������������������������������������������quota-4.09/m4/lib-ld.m4�����������������������������������������������������������������������������0000664�0000000�0000000�00000006761�14463210551�0014537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-ld.m4 serial 2 (gettext-0.12) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl 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. if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl # 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. 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. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi 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 ]) ���������������quota-4.09/m4/lib-link.m4���������������������������������������������������������������������������0000664�0000000�0000000�00000055343�14463210551�0015075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-link.m4 serial 4 (gettext-0.12) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. 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], [ 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], [ 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/lib" 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/lib"; 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 */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` 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*) 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/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) 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 ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/m4/lib-prefix.m4�������������������������������������������������������������������������0000664�0000000�0000000�00000012505�14463210551�0015426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-prefix.m4 serial 2 (gettext-0.12) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From 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_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/lib" 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*) 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/lib"; 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/lib"; 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" ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/m4/nls.m4��������������������������������������������������������������������������������0000664�0000000�0000000�00000003505�14463210551�0014161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nls.m4 serial 1 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl 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 <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. 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) ]) AC_DEFUN([AM_MKINSTALLDIRS], [ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but $(top_srcdir). dnl Try to locate it. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then case "$ac_aux_dir" in /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; esac fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/m4/po.m4���������������������������������������������������������������������������������0000664�0000000�0000000�00000021520�14463210551�0014000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# po.m4 serial 1 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl 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 <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. 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_MKINSTALLDIRS])dnl 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 >/dev/null 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 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 >/dev/null 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 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 >/dev/null 2>&1], :) dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then dnl If it is no GNU msgfmt we define it as : so that the dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` AC_MSG_RESULT( [found $GMSGFMT program is not GNU msgfmt; ignore it]) GMSGFMT=":" fi fi dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is no GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --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 : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po fi AC_OUTPUT_COMMANDS([ 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 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, GMOFILES, UPDATEPOFILES, DUMMYPOFILES 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" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= GMOFILES= UPDATEPOFILES= DUMMYPOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" 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|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|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, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it # from automake. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/m4/progtest.m4���������������������������������������������������������������������������0000664�0000000�0000000�00000005634�14463210551�0015241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# progtest.m4 serial 3 (gettext-0.12) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl 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 <drepper@cygnus.com>, 1996. # 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 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 ]) ����������������������������������������������������������������������������������������������������quota-4.09/missing����������������������������������������������������������������������������������0000775�0000000�0000000�00000015331�14463210551�0014202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2016-01-11.22; # UTC # Copyright (C) 1996-2017 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 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 <http://www.gnu.org/licenses/>. # 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 case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to <bug-automake@gnu.org>." 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 # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # 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: "UTC0" # time-stamp-end: "; # UTC" # End: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/mkinstalldirs����������������������������������������������������������������������������0000775�0000000�0000000�00000006723�14463210551�0015416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2016-01-11.22; # UTC # Original author: Noah Friedman <friedman@prep.ai.mit.edu> # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to <bug-automake@gnu.org>." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the 'mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because '.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ���������������������������������������������quota-4.09/mntopt.h���������������������������������������������������������������������������������0000664�0000000�0000000�00000003527�14463210551�0014301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef GUARD_MNTOPT_H #define GUARD_MNTOPT_H #include <mntent.h> /* filesystem type */ #define MNTTYPE_EXT2 "ext2" /* 2nd Extended file system */ #define MNTTYPE_EXT3 "ext3" /* ext2 + journaling */ #define MNTTYPE_EXT4 "ext4" /* ext4 filesystem */ #define MNTTYPE_F2FS "f2fs" /* f2fs filesystem */ #define MNTTYPE_NEXT3 "next3" /* next3 filesystem */ #define MNTTYPE_EXT4DEV "ext4dev"/* ext4dev filesystem */ #define MNTTYPE_MINIX "minix" /* MINIX file system */ #define MNTTYPE_UFS "ufs" /* UNIX file system */ #define MNTTYPE_UDF "udf" /* OSTA UDF file system */ #define MNTTYPE_REISER "reiserfs" /* Reiser file system */ #define MNTTYPE_XFS "xfs" /* SGI XFS file system */ #define MNTTYPE_EXFS "exfs" /* HPE EXFS file system */ #define MNTTYPE_AUTOFS "autofs" /* Automount mountpoint */ #define MNTTYPE_JFS "jfs" /* JFS file system */ #define MNTTYPE_NFS4 "nfs4" /* NFSv4 filesystem */ #define MNTTYPE_MPFS "mpfs" /* EMC Celerra MPFS filesystem */ #define MNTTYPE_OCFS2 "ocfs2" /* Oracle Cluster filesystem */ #define MNTTYPE_GFS2 "gfs2" /* Red Hat Global filesystem 2 */ #ifndef MNTTYPE_NFS #define MNTTYPE_NFS "nfs" /* Network file system. */ #endif /* mount options */ #define MNTOPT_NOQUOTA "noquota" /* don't enforce quota */ #define MNTOPT_QUOTA "quota" /* enforce user quota */ #define MNTOPT_USRQUOTA "usrquota" /* enforce user quota */ #define MNTOPT_USRJQUOTA "usrjquota" /* enforce user quota */ #define MNTOPT_GRPQUOTA "grpquota" /* enforce group quota */ #define MNTOPT_GRPJQUOTA "grpjquota" /* enforce group quota */ #define MNTOPT_RSQUASH "rsquash" /* root as ordinary user */ #define MNTOPT_BIND "bind" /* binded mount */ #define MNTOPT_LOOP "loop" /* loopback mount */ #define MNTOPT_JQFMT "jqfmt" /* journaled quota format */ #ifndef MNTOPT_NOAUTO #define MNTOPT_NOAUTO "noauto" /* Do not auto mount. */ #endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/��������������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14463210551�0013216�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/LINGUAS�������������������������������������������������������������������������������0000664�0000000�0000000�00000000014�14463210551�0014236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cs de fr pl ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/Makefile.in.in������������������������������������������������������������������������0000664�0000000�0000000�00000027441�14463210551�0015700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2003 by Ulrich Drepper <drepper@gnu.ai.mit.edu> # # 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. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ localedir = $(datadir)/locale gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ 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 $(DOMAIN).pot stamp-po \ $(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-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: # 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 -z "$(CATALOGS)" || $(MAKE) $(CATALOGS) @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 $(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$$//'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkinstalldirs) $(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 $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $(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 \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $(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: $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ 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); \ else \ cp -p $(srcdir)/$$file $(distdir); \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # 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 $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status 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: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/Makevars������������������������������������������������������������������������������0000664�0000000�0000000�00000003374�14463210551�0014721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = # 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 = jack@suse.cz # 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 = ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/POTFILES.in���������������������������������������������������������������������������0000664�0000000�0000000�00000001225�14463210551�0014773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������bylabel.c bylabel.h convertquota.c dqblk_rpc.h dqblk_v1.h dqblk_v2.h dqblk_xfs.h common.h mntopt.h warnquota.c quotacheck.c quotasync.c quota.h quota_nld.c quota_tree.h repquota.c quotacheck.h quotacheck_v1.c quotacheck_v2.c quotaio.c quotaio.h quotaio_generic.c quotaio_generic.h quotaio_meta.c quotaio_rpc.c quotaio_tree.c quotaio_v1.c quotaio_v1.h quotaio_v2.c quotaio_v2.h quotaio_xfs.c quotaio_xfs.h quotaon.c quotaon.h quotaon_xfs.c quotaops.c quotaops.h quotastats.c setquota.c quotasys.c quotasys.h rquota_client.c rquota_client.h rquota_server.c rquota_svc.c set_limits_example.c svc_socket.c xqmstats.c pot.h pot.c edquota.c config.h quota.c common.c ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/Rules-quot����������������������������������������������������������������������������0000664�0000000�0000000�00000003231�14463210551�0015220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 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-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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/boldquot.sed��������������������������������������������������������������������������0000664�0000000�0000000�00000000331�14463210551�0015541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/cs.gmo��������������������������������������������������������������������������������0000664�0000000�0000000�00000170217�14463210551�0014337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������w��l������H'��3���I'��D���}'��C���'��@���(����G(���� *��=���+��K���+��Y���$,��C���~,�����,�����,�����,�����-�����-�����5-�����L-�����c-��B���z-�� ���-�����-�����-��0���-��)���.�����I.�����i.�����.�����.�� ���.�����.�����.�����/�����/�����7/�����V/��0���t/�����/�����/�����/�� ���/�� ���/��&���/��&��� 0��7��30�����k2�����2�����q3��2���z3�� ���3��&���3�����3��9���4��8���O4��"���4��-���4�����4�����4�����5��G���5�����^5�����n5�����5�����5�����5��A���5��7���6��3���?6�����s6��!���y6�����6�� ���6��+���6�����6�� ���7�� ��� 7��-���7��5���H7��-���~7��*���7��#���7��#���7��?���8��"���_8��%���8��"���8��.���8��4���8��#���/9�����S9��&���k9��!���9��A���9��Q���9��6���H:�� ���:�����:�����:��*���:��5���:��'���*;��.���R;��M���;��%���;��9���;��7���/<��&���g<�����<��4���<�����<��<���<�����0=��8���J=�� ���=��"���=��(���=��1���=��)���">��*���L>��!���w>�����>��O���>��*���?��/���0?��#���`?��"���?��&���?�����?��*���?��(��� @�����6@��/���O@��"���@��*���@��%���@�����@����� A�����'A��/���DA��3���tA�����A��2���A��.���A��)���$B��%���NB��.���tB��(���B��-���B��*���B�����%C�����DC��2���bC��G���C�����C��V���D��.���D��)��� E�� ���7E��&���XE�����E��&���E��2���E��*���E��8��� F��1���YF�����F�����F��/���F�����F�����G��D���6G�����{G��3���G��2���G��$���H�� ���&H�����GH��C���_H��$���H��T���H��S���I��#���qI�����I�����I��"���I��-���I�����J��$���?J�����dJ��$���J�����J�����J�����J��5���J�����*K��%���=K�����cK�����K��!���K��0���K�����K��(���L��.���:L�� ���iL�����wL�����L��H���L��$���L��'���M��!���AM��$���cM��$���M�����M�����M�����M��,���M��$���,N��=���QN��!���N�����N�����N�����N�����N��!���O�����8O��9���UO��5���O��*���O��!���O��0���P��%���CP�����iP�� ���yP�����P��6���P��6���P��"���Q��2���1Q��7���dQ��3���Q��6���Q�����R�����R�� ���.R��L���9R�����R�����R�����R�����R�����R��_��� S��m���mS�����S��#���S��3���T�����PT�����VT��2���hT�����T��}���'U�����U��n���U��(���(V�����QV�����jV�����V�����W��G���W�����cW��'���hW�� ���W��2���W�����W�����W�����X��i���"X�� ���X�����X��,���X��8���X��1���Y��N���CY��<���Y��#���Y��=���Y�����1Z��(���LZ��)���uZ��!���Z�����Z��$���Z��5����[��/���6[��*���f[�����[��1���[��F���[��F���\�� ���e\�� ���\�����\�����\�����\�����\�����]��1���6]�����h]�����]�����]��J���]��%���]������^��4���^��4���J^�����^�����^��9���^��7���^��G���_��G���`_��6���_��0���_��0���`��W���A`��x���`��*���a��:���=a��O���xa�����a��,���Lb��&���yb��'���b��K���b��S���c��D���hc�����c�����c�����c��3��� d�����>d��$���\d�����d�����d��*���d��,���d�����e��1���"e��-���Te��X���e�����e�����e��P���f�����Xf�����jf��2���zf�����f��;���f��/���f��J���g�����jg��.���g��(���g��4���g��0���h�����@h��I���`h��H���h��1���h��2���%i��2���Xi��(���i�����i��(���i��$���i��N���j�����jj�����j����Kk��q��8m��j��n�����p����p����7t��N���v��5���fv��5���v��.���v��N���w��)���Pw��M���zw��8���w�����x��O��� x��)���Yx��6���x��$���x��1���x��#���y��*���5y��'���`y��<���y�����y��X���kz�����z�����z�����z�����z����� {�����+{�����2{��I���M{��C���{��C���{��A���|��A���a|�����|�����|�����|��.���|�����|��$���|��%���#}��5���I}��4���}�����}�����}�����}�����}��7���}�����6~�����G~�����X~�����n~�����~�����~�����~�����~�����~��5���~��1��� �����<�����A�����G��N���M�������������������������������� ����������������������������,�����3�����;�����V�����\��#���n��"���������� ���π�����ـ����������������������J��,��D���w��=�����?�����E���:��������T��A�����R���A��d�����J��������D�����d��������������������݈������������K���:�� ����������"�����7�����+�����"��������A�����a�����}��*�����$���Ċ�������������������������>��3���]�������������������������Ƌ��/���ϋ��$�������$����������w�������2��� �� ���>��-���_��)�����/�����G�����$���/��4���T�����������������k���ޑ�����J�����_�����{������������Z���ђ��B���,��3���o�������&��������ѓ�� �����2�����&���$�����K��{���a��3���ݔ��>�����.���P��1�����$����� ���֕��?�����!���7��-���Y��6�����3�����C�����.���6�����e��-�����%�����E���ԗ��^�����4���y����������̘�����ޘ��3�����I���.��7���x��B�����t�����4���h��Y�����J�����5���B�����x��J�����(���ߛ��V����� ���_��B�����'���Ü��2�����9�����3���X��,�����.�����0�����%�����d���?��9�����;���ޞ��6�����%���Q��8���w�������8���ȟ��5��������7��.���V��.�����@�����2��������(��(���C��$���l��?�����:���ѡ����� ��G���*��<���r��9�����9�����4���#��6���X��7�����0���ǣ�������,�����B���?��W��������ڤ��r���ɥ��7���<��8���t��*�����2���ئ����� ��/���*��?���Z��0�����C���˧��4�����$���D��%���i��O�����*���ߨ��1��� ��r���<��3�����G�����M���+��8���y��2�����"�����G�����2���P��s�����s�����(���k��3��������Ȭ��&�����2��� �� ���>��%���_�� �����,�����0���ӭ��-��������2��H���D�������-�����1���Ϯ��'�����+���)��K���U��)�����/���˯��.��������*��!���:�����\��j���y��(�����1��� ��%���?��(���e��$�����.����������'�����9�����(���X��r�����!�������������6��+���<��#���h��!����������?���ʳ��8��� ��<���C��'�����<�����)����� ����� ����� ���*��Q���K��S�����/�����G���!��L���i��3�����?��������*��%���B�����h��V���y��'���з��+��������$�����=�����Z��j���y��q��������V��4���u��:���������������F��������O����������d�����{��*��������&�����D��$�����&�����N���/�� ���~��/����������8���˽�������-���!��+���O��w���{�������!�����6���&��?���]��A�����Y���߿��I���9��'�����L����������/�����A���G��-�����$�����4�����/�����<���A��5���~�������6�����V������V���W�������4������������� �����?�����Z�����v��<�����/���������������T�����.���d��#�����B�����D�����'���?��(���g��>�����C�����H�����E���\��>�����)�����\��� ��j���h�������5���p��B�����[��������E��7�����*���"��1���M��x�����t�����F���m��,�����!�����+�����>���/�����n��8�����*�����2�����1���!��3���S�������B�����8�����d���������� �����d�������������3��7���N�������D�����9�����Z��� �����g��J�����!�����^�����6���K��$�����F�����P�����N���?��N�����J�����0���(�����Y��-���x��(�����_����� ���/�����P��@��I������`��B�� ����� ����Q����_��� ��<���l��<�����9�����_��� ��9�����_�����G��������b��h���h��/�����H�����3���J��<���~��#�����<�����"�����5���?�����u��l���C����������������������-��� �����7�����=��F���Z��H�����I�����K���4��K��������������������0����� �����2���/��2���b��:�����3���������������/���=�����m��E���u��3������������������������=�� ���]�����~������������6�����K��������(�����/�����5��n���;���������������������������%����� ������������� �����"�����6�����L�����T��!���[�����}�������.�����.���������� ��������$�� ���B�� ���N�����X�����r������� ���������>���O��������U���������������������d�����������a�����������������(���L�����������7����'���0�����]��������������*��x���P���,������i���������������������������H����������������������/�������*���)���������������z������������g��������������l����������������!����������������������w���9��F���4���������O�����������}����j�����;��������}�������������3��i���z������8���m�������������.�����������D���.��������������I���������������������� ����������$���o������������@��;�������L������������������������������^�� ������ ��]��n�������h�������%�������t�������1������������������?������������`����������"��������������������r�����W����2���=��������������8��������m������������7���������������B�����n���o�������C������~���������Q���b��:����������������9�������r����������`��p���G��{��%������<�������������������������|���#�����5��������g��l����� �����������������/��!��f������������������������A�������������-��^��������������N���v����������������2��U��d����������q������y������5�������T���M����������� �����A������������y�����������������������������������?�����������������������s������������I���v��+���������������������������\��� ������p��a���������������������������������=��c����E������������u������������W�������'��1������������~������������Z����������������Z���������������������������������������������������������G������������J����������(�������������������������������>��������b���Y����� ������������������������"�����������[�������c���������� ���������������������X������V�����������������������h��x����������F����_���������������������@���\��N�����J������j����������k�����������������q�����������������������������������������������������3����������)����������[�������������������|��������������������0���6����������S����������R�����C�� ���$������������������t�����-���&���e��K�����������#������������������������S�����D������K���M������e�������_�������T��Q������E�����k��s������������f�����������V����������,���{���R����������B������ �������&����� �����������X��������Y�����+���<�����6���u�������4��H�����:��P��w���������������� Adding %s size %lld ino %d links %d uid %u gid %u � quota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ... � quota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ... � Block limits File limits � Please cleanup the group data before the grace period expires. Basically, this means that the system thinks group is using more disk space on the above partition(s) than it is allowed. If you do not delete files and get below group quota before the grace period expires, the system will prevent you and other members of the group from creating new files owned by the group. For additional assistance, please contact us at %s or via phone at %s. � We hope that you will cleanup before your grace period expires. Basically, this means that the system thinks you are using more disk space on the above partition(s) than you are allowed. If you do not delete files and get below your quota before the grace period expires, the system will prevent you from creating new files. For additional assistance, please contact us at %s or via phone at %s. � %s limits File limits � Filesystem block grace inode grace � Filesystem blocks soft hard inodes soft hard � Filesystem Block grace period Inode grace period � cache hits: %u � cache misses: %u � dquot dups: %u � dquot wants: %u � inact reclaims: %u � missed reclaims: %u � reclaims: %u � shake reclaims: %u �%-9s used soft hard grace used soft hard grace �%02d:%02d�%ddays�%s (gid %d): Permission denied �%s (gid %d): error while trying getgroups(): %s �%s (gid %d): gid set allocation (%d): %s �%s (uid %d): Permission denied �%s [%s]: %s quotas turned off �%s [%s]: %s quotas turned on �%s quota on %s (%s) is %s �%s quota sync failed for %s: %s �%s quota sync failed: %s �%s: %s �%s: %s quotas turned off �%s: %s quotas turned on �%s: %s root_squash turned off �%s: %s root_squash turned on �%s: Quota cannot be turned on on NFS filesystem �%s: deleted %s quota blocks �%udays�%uhours�%uminutes�%useconds�*** Report for %s quotas on device %s �*** Status for %s quotas on device %s �-F, --format=formatname edit quotas of a specific format -p, --prototype=name copy data from a prototype user/group --always-resolve always try to resolve name, even if it is composed only of digits -f, --filesystem=filesystem edit data only on a specific filesystem -t, --edit-period edit grace period -T, --edit-times edit grace time of a user/group -h, --help display this help text and exit -V, --version display version information and exit �-r, --remote edit remote quota (via RPC) -m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints �-r, --remote set remote quota (via RPC) -m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints �0seconds�Accounting [ondisk]: %s; Enforcement [ondisk]: %s �Accounting: %s; Enforcement: %s �Adding dquot structure type %s for %d �Adding hardlink for inode %llu �Administrator for a group %s not found. Cancelling mail. �Allocated %d bytes memory Free'd %d bytes Lost %d bytes �Already accounting %s quota on %s �As you wish... Canceling check of this file. �Bad block grace time�Bad block hardlimit�Bad block softlimit�Bad file magic or version (probably not quotafile with bad endianity). �Bad format: %s �Bad inode grace time�Bad inode hardlimit�Bad inode softlimit�Bad number of arguments. �Bad time units. Units are 'second', 'minute', 'hour', and 'day'. �Batch mode and prototype user cannot be used together. �Batch mode cannot be used for setting grace times. �Block�Block %u in tree referenced twice�Block %u is truncated. �Block %u: �Block grace time: %s; Inode grace time: %s �Block limit reached on�Bugs to %s �Bugs to: %s �Cannot access the specified xtab file %s: %s �Cannot allocate new quota block (out of disk space). �Cannot change grace times over RPC protocol. �Cannot change owner of temporary file: %s �Cannot change permission of %s: %s �Cannot change state of GFS2 quota. �Cannot change state of XFS quota. It's not compiled in kernel. �Cannot commit dquot for id %u: %s �Cannot connect to netlink socket: %s �Cannot connect to system DBUS: %s �Cannot create DBUS message: No enough memory. �Cannot create file for %ss for new format on %s: %s �Cannot create new quotafile %s: %s �Cannot create pipe: %s �Cannot create set for sigaction(): %s �Cannot create temporary file: %s �Cannot delete %s quota on %s - switch quota accounting off first �Cannot delete %s quota on %s - switch quota enforcement and accounting off first �Cannot detect quota format for journalled quota on %s �Cannot duplicate descriptor: %s �Cannot exec %s �Cannot execute '%s': %s �Cannot find a device with %s. Skipping... �Cannot find a filesystem mountpoint for directory %s �Cannot find any quota file to work on. �Cannot find checked quota file for %ss on %s! �Cannot find filesystem to check or filesystem not mounted with quota option. �Cannot find mountpoint for device %s �Cannot find quota file on %s [%s] to turn quotas on/off. �Cannot find quota option on filesystem %s with quotas! �Cannot finish IO on new quotafile: %s �Cannot fork: %s �Cannot gather quota data. Tree root node corrupted. �Cannot get device name for %s �Cannot get exact used space... Results might be inaccurate. �Cannot get host name: %s �Cannot get info for %s quota file from kernel on %s: %s �Cannot get name for uid/gid %u. �Cannot get name of new quotafile. �Cannot get name of old quotafile on %s. �Cannot get quota for %s %d from kernel on %s: %s �Cannot get quota information for user %s �Cannot get quota information for user %s. �Cannot get quotafile name for %s �Cannot get system info: %s �Cannot guess format from filename on %s. Please specify format on commandline. �Cannot initialize IO on new quotafile: %s �Cannot initialize IO on xfs/gfs2 quotafile: %s �Cannot initialize mountpoint scan. �Cannot initialize quota on %s: %s �Cannot join quota multicast group: %s �Cannot open %s: %s �Cannot open %s: %s Will use device names. �Cannot open any file with mount points. �Cannot open file %s: %s �Cannot open file with group administrators: %s �Cannot open new quota file %s: %s �Cannot open old format file for %ss on %s �Cannot open old quota file on %s: %s �Cannot open pipe: %s �Cannot open quotafile %s: %s �Cannot parse input line %d. �Cannot parse line %d in quotatab (missing ':') �Cannot parse time at CC_BEFORE variable (line %d). �Cannot read block %u: %s �Cannot read entry for id %u from quotafile %s: %s �Cannot read first entry from quotafile %s: %s �Cannot read header from quotafile %s: %s �Cannot read header of old quotafile. �Cannot read individual grace times from file. �Cannot read info from quota file %s: %s �Cannot read information about old quotafile. �Cannot read quota structure for id %u: %s �Cannot read quotas from file. �Cannot read stat file %s: %s �Cannot register callback for netlink messages: %s �Cannot remount filesystem %s read-write. cannot write new quota files. �Cannot remount filesystem mounted on %s read-only so counted values might not be right. Please stop all programs writing to filesystem or use -m flag to force checking. �Cannot remount filesystem mounted on %s read-only. Counted values might not be right. �Cannot rename new quotafile %s to name %s: %s �Cannot rename old quotafile %s to %s: %s �Cannot reset signal handler: %s �Cannot resolve mountpoint path %s: %s �Cannot resolve path %s: %s �Cannot resolve quota netlink name: %s �Cannot set both individual and global grace time. �Cannot set grace times over RPC protocol. �Cannot set info for %s quota file from kernel on %s: %s �Cannot set quota for %s %d from kernel on %s: %s �Cannot set signal handler: %s �Cannot set socket options: %s �Cannot stat device %s (maybe typo in quotatab) �Cannot stat directory %s: %s �Cannot stat mountpoint %s: %s �Cannot stat old %s quota file %s: %s. Usage will not be subtracted. �Cannot stat quota file %s: %s �Cannot stat() a mountpoint with %s: %s Skipping... �Cannot stat() given mountpoint %s: %s Skipping... �Cannot stat() mounted device %s: %s �Cannot stat() mountpoint %s: %s �Cannot statfs() %s: %s �Cannot switch off %s quota accounting on %s when enforcement is on �Cannot sync quotas on device %s: %s �Cannot turn %s quotas off on %s: %s Kernel won't know about changes quotacheck did. �Cannot turn %s quotas on on %s: %s Kernel won't know about changes quotacheck did. �Cannot turn on/off quotas via RPC. �Cannot wait for mailer: %s �Cannot write block (%u): %s �Cannot write grace times to file. �Cannot write individual grace times to file. �Cannot write quota (id %u): %s �Cannot write quota for %u on %s: %s �Cannot write quotas to file. �Checked %d directories and %d files �Checking quotafile headers... �Checking quotafile info... �Compiled with:%s �Continue checking assuming version from command line?�Corrupted blocks: �Corrupted number of used entries (%u)�Could not close PID file '%s'. �Could not get values for %s. �Could not open PID file '%s': %s �Could not register PID file removal on SIGTERM. �Could not store my PID %jd. �Could not write daemon's PID into '%s'. �Creation of %s quota format is not supported. �Data dumped. �Denied access to host %s �Detected quota format %s �Device (%s) filesystem is mounted on unsupported device type. Skipping. �Disabling %s quota accounting on %s �Disabling %s quota enforcement %son %s �Disk quotas for %s %s (%cid %d): �Disk quotas for %s %s (%cid %u): %s �Do not know how to buffer format %d �Dumping gathered data for %ss. �Duplicated entries.�EXT2_IOC_GETFLAGS failed: %s �Enable XFS %s quota accounting during mount �Enabling %s quota enforcement on %s �Enabling %s quota on root filesystem (reboot to take effect) �Enforcing %s quota already on %s �Entry for id %u is truncated. �Error�Error checking device name: %s �Error parsing netlink message. �Error while editing grace times. �Error while editing quotas. �Error while getting old quota statistics from kernel: %s �Error while getting quota statistics from kernel: %s �Error while opening old quota file %s: %s �Error while releasing file on %s �Error while searching for old quota file %s: %s �Error while syncing quotas on %s: %s �Error with %s. �Exitting. �Failed to delete quota: %s �Failed to find tty of user %llu to report warning to. �Failed to open tty %s of user %llu to report warning. �Failed to parse grace times file. �Failed to read or parse quota netlink message: %s �Failed to remove IMMUTABLE flag from quota file %s: %s �Failed to write message to dbus: No enough memory. �Failed to write quota message for user %llu to %s: %s �File info done. �File limit reached on�Filesystem�Filesystem used soft hard grace used soft hard grace �Filesystem remounted RW. �Filesystem remounted read-only �First entry loaded. �Found an invalid UUID: %s �Found i_num %ld, blocks %ld �Found more structures for ID %u. Using values: BHARD: %lld BSOFT: %lld IHARD: %lld ISOFT: %lld �Found more structures for ID %u. Values: BHARD: %lld/%lld BSOFT: %lld/%lld IHARD: %lld/%lld ISOFT: %lld/%lld �Gid set allocation (%d): %s �Going to check %s quota file of %s �Grace period before enforcing soft limits for %ss: �Group�Headers checked. �Headers of file %s checked. Going to load data... �Hi, We noticed that the group %s you are member of violates the quotasystem used on this system. We have found the following violations: �Hi, We noticed that you are in violation with the quotasystem used on this system. We have found the following violations: �High uid detected. �ID %u has more structures. User intervention needed (use -i for interactive mode or -n for automatic answer). �Illegal free block reference to block %u�Illegal port number: %s �Illegal reference (%u >= %u) in %s quota file on %s. Quota file is probably corrupted. Please run quotacheck(8) and try again. �In block grace period on�In file grace period on�Incorrect format string for variable %s. Unrecognized expression %%%c. �Info�Inode: #%llu (%llu blocks, %u extents) �Inode: none �Inserting already present quota entry (block %u). �Invalid argument "%s" �Kernel quota version: %u.%u.%u �Kernel quota version: old �LDAP library version >= 2.3 detected. Please use LDAP_URI instead of hostname and port. Generated URI %s �Leaving %s �Line %d too long. �Loading first quota entry with grace times. �Maximum %u dquots (currently %u incore, %u on freelist) �Maybe create new quota files with quotacheck(8)? �Metadata init_io called when kernel does not support generic quota interface! �Metadata init_io called when kernel support is not enabled. �Mountpoint %s is not a directory?! �Mountpoint (or device) %s not found or has no quota enabled. �Mountpoint not specified. �Name must be quotaon or quotaoff not %s �Name of quota file too long. Contact %s. �No correct mountpoint specified. �No filesystem specified. �No filesystems with quota detected. �No possible destination for messages. Nothing to do. �Not all specified mountpoints are using quota. �Not enough memory to build PID file name. �Not enough memory. �Not found any corrupted blocks. Congratulations. �Not setting block grace time on %s because softlimit is not exceeded. �Not setting inode grace time on %s because softlimit is not exceeded. �Number of allocated dquots: %ld �Number of dquot cache hits: %ld �Number of dquot drops: %ld �Number of dquot lookups: %ld �Number of dquot reads: %ld �Number of dquot writes: %ld �Number of free dquots: %ld �Number of in use dquot entries (user/group): %ld �Number of quotafile syncs: %ld �OFF�ON�Old %s file name could not been determined. Usage will not be subtracted. �Old file found removed during check! �Old file not found. �Only RPC quota format is allowed on NFS filesystem. �Only XFS quota format is allowed on XFS filesystem. �Over block quota on�Over file quota on�Parse error at line %d. Cannot find administrators name. �Parse error at line %d. Cannot find end of group name. �Parse error at line %d. Trailing characters after administrators name. �Prototype name does not make sense when editing grace period or times. �Prototype user has no sense when editing grace times. �Quota enforcement already disabled for %s on %s �Quota file %s has IMMUTABLE flag set. Clearing. �Quota file %s has corrupted headers. You have to specify quota format on command line. �Quota file format version %d does not match the one specified on command line (%d). Quota file header may be corrupted. �Quota file not found or has wrong format. �Quota file on %s [%s] does not exist or has wrong format. �Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file. �Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file. Please turn quotas off or use -f to force checking. �Quota for id %u referenced but not present. �Quota format not supported in kernel. �Quota not supported by the filesystem. �Quota on %s is stored in system files and must be manipulated by fs tools. �Quota structure for %s owning quota file not present! Something is really wrong... �Quota structure has offset to other block (%u) than it should (%u). �Quota utilities version %s. �Quota write failed (id %u): %s �RPC quota format not compiled. �RPC quota format specified for non-NFS filesystem. �Reference to illegal block %u�Renaming new files to proper names. �Renaming new quotafile �Renaming old quotafile to %s~ �Repquota cannot report through RPC calls. �Required format %s not supported by kernel. �Scanning %s [%s] �Scanning stored directories from directory stack �Setting grace period on %s is not supported. �Setting grace times and other flags to default values. Assuming number of blocks is %u. �Should I continue?�Should I use new values?�Size of file: %lu Blocks: %u Free block: %u Block with free entry: %u Flags: %x �Skipping %s [%s] �Skipping line. �Something weird happened while scanning. Error %d �Space�Specified both -n and -t but only one of them can be used. �Specified path %s is not directory nor device. �Statistics: Total blocks: %u Data blocks: %u Entries: %u Used average: %f �Substracted %lu bytes. �Substracting space used by old %s quota file. �The running kernel does not support XFS �Time units may be: days, hours, minutes, or seconds �Times to enforce softlimit for %s %s (%cid %d): �Too many parameters to editor. �Trying to set quota limits out of range supported by quota format on %s. �Trying to set quota usage out of range supported by quota format on %s. �Trying to write info to readonly quotafile on %s �Trying to write info to readonly quotafile on %s. �Trying to write quota to readonly quotafile on %s �Unable to resolve name '%s' on line %d. �Undefined program name. �Unexpected XFS quota state sought on %s �Unknown action should be performed. �Unknown format of kernel netlink message! Maybe your quota tools are too old? �Unknown option '%c'. �Unknown quota format: %s Supported formats are: vfsold - original quota format vfsv0 - standard quota format vfsv1 - quota format with 64-bit limits rpc - use RPC calls xfs - XFS quota format �Usage: %s [options] Options are: -h --help shows this text -V --version shows version information -F --foreground starts the quota service in foreground -I --autofs do not ignore mountpoints mounted by automounter -p --port <port> listen on given port -s --no-setquota disables remote calls to setquota (default) -S --setquota enables remote calls to setquota -x --xtab <path> set an alternative file with NFSD export table �Usage: %s [options] Options are: -h --help shows this text -V --version shows version information -F --foreground starts the quota service in foreground -I --autofs do not ignore mountpoints mounted by automounter -p --port <port> listen on given port -x --xtab <path> set an alternative file with NFSD export table �Usage: %s [options] Options are: -h --help shows this text -V --version shows version information -C --no-console do not try to write messages to console -b --print-below write to console also information about getting below hard/soft limits -D --no-dbus do not try to write messages to DBUS -F --foreground run daemon in foreground �User�Utility for checking and repairing quota files. %s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a -u, --user check user files -g, --group check group files -c, --create-files create new quota files -b, --backup create backups of old quota files -f, --force force check even if quotas are enabled -i, --interactive interactive mode -n, --use-first-dquot use the first copy of duplicated structure -v, --verbose print more information -d, --debug print even more messages -m, --no-remount do not remount filesystem read-only -M, --try-remount try remounting filesystem read-only, continue even if it fails -R, --exclude-root exclude root when checking all filesystems -F, --format=formatname check quota files of specific format -a, --all check all filesystems -h, --help display this message and exit -V, --version display version information and exit �Utility for converting quota files. Usage: %s [options] mountpoint -u, --user convert user quota file -g, --group convert group quota file -e, --convert-endian convert quota file to correct endianity -f, --convert-format oldfmt,newfmt convert from old to VFSv0 quota format -h, --help show this help text and exit -V, --version output version information and exit �WARNING - Quotafile %s was probably truncated. Cannot save quota settings... �WARNING - %s: cannot change current block allocation �WARNING - %s: cannot change current inode allocation �WARNING - Quota file %s has corrupted headers �WARNING - Quota file %s was probably truncated. Cannot save quota settings... �WARNING - Quota file info was corrupted. �WARNING - Quotafile %s was probably truncated. Cannot save quota settings... �WARNING - Some data might be changed due to corruption. �Warning�Warning: Cannot open export table %s: %s Using '/' as a pseudofilesystem root. �Warning: Cannot set EXT2 flags on %s: %s �Warning: Ignoring -%c when filesystem list specified. �Warning: Mailer exitted abnormally. �Warning: No quota format detected in the kernel. �XFS Quota Manager dquot statistics �XFS quota allowed only on XFS filesystem. �You have to specify action to perform. �You have to specify source and target format of conversion. �Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. �Your quota file is stored in wrong endianity. Please use convertquota(8) to convert it. �and accounting �bad format: %s �block limit reached�block quota exceeded�block quota exceeded too long�blocks�cannot find %s on %s [%s] �cannot write times for %s. Maybe kernel does not support such operation? �copy_group_quota_limits: Failed to get groupquota for gid %ld : %s �copy_group_quota_limits: Failed to set groupquota for gid %ld : %s �copy_user_quota_limits: Failed to get userquota for uid %ld : %s �copy_user_quota_limits: Failed to set userquota for uid %ld : %s �day�days�done �error (%d) while allocating file inode bitmap �error (%d) while opening %s �error (%d) while opening inode scan �error (%d) while starting inode scan �error while getting quota from %s for %s (id %u): %s �errstr (%d) while allocating directory inode bitmap �file limit reached�file quota exceeded�file quota exceeded too long�files�find_free_dqentry(): Data block full but it shouldn't. �fsname mismatch �getgroups(): %s �got below block limit�got below block quota�got below file limit�got below file quota�grace�group�group %s does not exist. �host %s attempted to call setquota from port >= 1024 �host %s attempted to call setquota when disabled �hour�hours�limit�lstat: Cannot stat `%s/%s': %s Guess you'd better run fsck first ! exiting... �minute�minutes�none�off�on�popd %s Entering directory %s �pushd %s/%s �quota�quotactl on %s [%s]: %s �quotactl on %s: %s �quotactl() on %s: %s �second�seconds�set root_squash on %s: %s �space�svc_run returned �turn quotas off for all filesystems�turn quotas on for all filesystems�unable to free arguments �undefined�unknown quota warning�unset�user�user %s does not exist. �using %s on %s [%s]: %s �Project-Id-Version: quota-tools 4.01 Report-Msgid-Bugs-To: jack@suse.cz PO-Revision-Date: 2012-09-10 16:55+0200 Last-Translator: Petr Pisar <petr.pisar@atlas.cz> Language-Team: Czech <translation-team-cs@lists.sourceforge.net> Language: cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit � Přidává se %s: velikost %lld iuzel %d odkazů %d, UID %u GID %u � quota [-qvswim] [-l | [-Q | -A]] [-F FORMÁT] -g SKUPINA… � quota [-qvswim] [-l | [-Q | -A]] [-F FORMÁT] -u UŽIVATEL… � Limity bloků Limity souborů � Prosíme, abyste uklidili data skupiny před vypršením periody odkladu. V zásadě to znamená, že systém si myslí, že skupina používá více diskového prostoru na oddílech uvedených výše, než má dovoleno. Pokud soubory nesmažete a nedostanete se pod limit skupiny před uplynutím periody odkladu, systém vám a dalším členům skupiny bude bránit v tvorbě nových souborů. Potřebujete-li pomoc, napište nám na %s nebo zavolejte na %s. � Doufáme, že si uklidíte dříve, než vyprší perioda odkladu. V zásadě to znamená, že systém si myslí, že používáte více diskového prostoru na oddílech uvedených výše, než máte dovoleno. Pokud soubory nesmažete a nedostanete se pod váš limit před uplynutím periody odkladu, systém vám bude bránit v tvorbě nových souborů. Potřebujete-li pomoc, napište nám na %s nebo zavolejte na %s. � Limity %s Limity souborů � Souborový systém odklad pro bloky odklad pro iuzly � Souborový systém bloků měkký pevný iuzlů měkký pevný � Souborový systém Perioda odkladu bloků Perioda odkladu iuzlů � zásahů v keši: %u � nenalezení v keši: %u � duplikací dquot: %u � požadavků na dquot: %u � uvolnění neaktivních: %u � nenalezená uvolnění: %u � uvolnění: %u � uvolnění setřesením: %u �%-9s užito měkký pevný odklad užito měkký pevný odklad �%02d:%02d�%ddnů�%s (GID %d): Povolení zamítnuto �%s (GID %d): volání getgroups() skončilo chybou: %s �%s (GID %d): alokace množiny GID (%d): %s �%s (UID %d): Povolení zamítnuto �%s [%s]: kvóty pro %s vypnuty �%s [%s]: kvóty %s zapnuty �Kvóta %s na %s (%s) je %s �synchronizace kvóty %s na %s selhala: %s �synchronizace kvóty %s selhala: %s �%s: %s �%s: kvóty %s vypnuty �%s: kvóty %s zapnuty �%s: root_squash na %s vypnuto �%s: root_squash na %s zapnuto �%s: Kvótu nelze souborovém systému NFS zapnout. �%s: bloky kvóty %s smazány �%udnů�%uhodin�%uminut�%usekund�*** Hlášení pro kvóty %s na zařízení %s �*** Stav kvót %s na zařízení %s �-F, --format=FORMÁT upraví kvóty v zadaném formátu -p, --prototype=JMÉNO zkopíruje údaje z uživatele/skupiny coby vzoru --always-resolve vždy zkusí přeložit jméno, i když je tvořeno jen číslicemi -f, --filesystem=SOUBOROVÝ_SYSTÉM upraví údaje jen na zadaném SOUBOROVÉM_SYSTÉMU -t, --edit-period upraví periodu odkladu -T, --edit-times upraví dobu odkladu pro uživatele/skupinu -h, --help zobrazí tuto nápovědu a skončí -V, --version zobrazí údaje o verzi a skončí �-r, --remote upraví vzdálenou kvótu (přes RPC) -m, --no-mixed-pathnames odstraní z připojovacích míst NFSv4 počáteční lomítka �-r, --remote nastaví vzdálenou kvótu (přes RPC) -m, --no-mixed-pathnames odstraní úvodní lomítka z systému NFSv4 �0sekund�Účtování [ondisk]: %s; Vynucení [ondisk]: %s �Účtování: %s; Vynucení: %s �Přidává se struktura dquot typu %s pro %d �Přidává se pevný odkaz na iuzel %llu �Správce skupiny %s nenalezen. E-mail zrušen. �Alokováno %'d bajtů paměti Uvolněno %'d bajtů Ztraceno %'d bajtů �Kvóty %s na %s se již počítají �Jak si přejete. Kontrola tohoto souboru se ruší. �Chybná doba odkladu bloků�Chybný pevný limit bloků�Chybný měkký limit bloků�Špatný magický kód nebo verze (pravděpodobně se nejedná o kvótový soubor s chybnou endianitou). �Chybný formát: %s �Chybná doba odkladu iuzlů�Chybný pevný limit iuzlů�Chybný měkký limit iuzlů�Špatný počet argumentů. �Chybné jednotky času. Jednotky jsou „second“, „minute“, „hour“ a „day“. �Dávkový režim a vzorového uživatele nelze nastavit najednou. �Dobu odkladu nelze v dávkovém režimu nastavit. �bloků�Blok %u odkazován ve stromě dvakrát�Zkráceno %u bloků. �Blok %u: �Doba odkladu bloků: %s, Doba odkladu i-uzlů: %s �Omezení na počet bloků dosaženo na�Chyby hlaste na <%s> �Chyby v programu zasílejte (anglicky) na: %s Chyby v překladu (česky) na: <translation-team-cs@lists.sourceforge.net> �K zadanému souboru xtab %s nelze přistoupit: %s �Nelze alokovat nový kvótový blok (na disku došlo místo). �Doby odkladu nelze měnit přes protokol RPC. �Nelze změnit vlastníka dočasného souboru: %s �Nelze změnit práva souboru %s: %s �Stav kvóty GFS2 nelze změnit. �Stav kvóty XFS nelze změnit. Není zakompilováno do jádra. �Nelze zapsat dquot pro ID %u: %s �Na netlinkový socket se nelze připojit: %s �Nelze se připojit k systémové sběrnici D-bus: %s �Zprávu D-bus nelze vytvořit: Nedostatek paměti. �Nelze vytvořit soubor pro třídu %s v novém formátu na %s: %s �Nový kvótový soubor %s nelze vytvořit: %s �Nelze vytvořit rouru: %s �Nelze vytvořit množinu pro sigaction(): %s �Nelze vytvořit dočasný soubor: %s �Nelze smazat kvótu %s na %s – nejprve vypněte účtování kvót �Kvótu %s nelze na %s smazat – nejprve je třeba vypnout vynucování a účtování kvót �U žurnálované kvóty na %s nelze určit formát �Deskriptor nelze zdvojit: %s �%s nelze spustit �„%s“ nelze spustit: %s �Zařízení s %s nelze nalézt. Přeskakuje se… �K adresáři %s nelze přiřadit bod připojení souborového systému. �Nenalezeny žádné kvótové souboru ke zpracování. �Nelze najít kontrolovaný kvótový soubor pro třídu %s na %s! �Nelze nalézt systém souborů určený ke kontrole nebo systém souborů není připojen s kvótovým parametrem. �K zařízení %s nelze přiřadit bod připojení. �Pro vypnutí/zapnutí kvót je třeba kvótový soubor, který nelze na %s [%s] nalézt. �U souborového systému %s s kvótami nelze nalézt kvótový parametr! �Nelze dokončit I/O na novém kvótovém souboru: %s �Voláni fork() selhalo: %s �Nelze posbírat údaje o kvótách. Kořenový uzel stromu je poškozen. �Nelze získat název zařízení pro %s �Nelze zjistit přesné množství zabraného místa. Výsledky mohou být nepřesné. �Nelze získat název stroje: %s �Z jádra nelze získat údaje o kvótovém souboru %s na %s: %s �UID/GID %u nelze přeložit na jméno. �Nelze získat název nového souboru s kvótami. �Nelze zjistit název starého kvótového souboru na %s. �Z jádra nelze získat kvótu pro %s %d na %s: %s �Údaj o kvótě uživatele %s nelze získat �Údaj o kvótě uživatele %s nelze získat. �Nelze získat název kvótového souboru pro %s �Nelze získat údaje o systému: %s �Z názvu souboru na %s nelze uhádnout formát. Prosím, zadejte formát na příkazovém řádku. �Nelze inicializovat I/O na novém kvótovém souboru: %s �Nelze inicializovat I/O na kvótovém souboru XFS/GFS2: %s �Prohledávání bodu připojení nelze inicializovat. �Kvóty na %s nelze inicializovat: %s �Nelze se připojit k multicastové skupině kvóty: %s �%s nelze otevřít: %s �%s nelze otevřít: %s Použijí se názvy zařízení. �Žádný soubor s body připojení nelze otevřít. �Soubor %s nelze otevřít: %s �Soubor se správci skupin nelze otevřít: %s �Nový kvótový soubor %s nelze otevřít: %s �Nelze otevřít soubor ve starém formátu pro třídu %s na %s �Nelze otevřít starý kvótový soubor na %s: %s �Nelze otevřít rouru: %s �Kvótový soubor %s nelze otevřít: %s �Vstupní řádek %d nelze rozebrat. �V souboru quotatab nelze rozebrat řádek %d (chybí „:“) �Čas v proměnné CC_BEFORE nelze rozebrat (řádek %d). �Blok %u nelze přečíst: %s �Z kvótového souboru %2$s nelze přečíst záznam pro ID %1$u: %3$s �Z kvótového souboru %s nelze načíst první záznam: %s �Z kvótového souboru %s nelze přečíst hlavičku: %s �Hlavičku starého souboru s kvótami nelze přečíst. �Ze souboru nelze načíst jednotlivé doby odkladu. �Údaje z kvótového souboru %s nelze přečíst: %s �Údaje o starém kvótovém souboru nelze přečíst. �Strukturu kvóty pro ID %u nelze přečíst: %s �Kvóty nelze ze souboru. �Nelze načíst soubor se statistikou %s: %s �Zpětné volání pro netlinkové zprávy nelze zaregistrovat: %s �Systém souborů %s nelze přepojit pro zápis. Nový soubor s kvótami nelze zapsat. �Souborový systém připojený do %s nelze přepojit jen pro čtení, tudíž vypočtené hodnoty nemusí být správné. Prosím, zastavte všechny programy zapisující do souborového systému, nebo kontrolu vynuťte přepínačem -m. �Souborový systém připojený do %s nelze přepojit jen pro čtení. Vypočtené hodnoty nemusí být správné. �Nový kvótový soubor %s nelze přejmenovat na %s: %s �Starý kvótový soubor %s nelze přejmenovat na %s: %s �Nelze znovu nastavit obsluhu signálu: %s �Nelze přeložit cestu k bodu připojení %s: %s �Cestu %s nelze přeložit: %s �Nelze přeložit netlinkový název kvóty: %s �Jednotlivé a globální doby odkladu nelze nastavit najednou. �Doby odkladu nelze nastavit přes protokol RPC. �Z jádra nelze nastavit údaje o kvótovém souboru %s na %s: %s �Z jádra nelze nastavit kvótu pro %s %d na %s: %s �Nelze nastavit obsluhu signálu: %s �Socketu nelze nastavit parametry: %s �O zařízení %s nelze získat údaje (možná překlep v souboru quotatab) �Údaje o adresáři %s nelze získat: %s �Nelze získat údaje o přípojném bodu %s: %s �Nebylo možné zjistit údaje o starém kvótovém souboru %2$s pro třídu %1$s: %3$s. Místo nebude odečteno. �O souboru s kvótami %s nelze zjistit údaje: %s �Nad bodem připojení s %s nelze zavolat stat(): %s Přeskakuje se… �Nad zadaným bodem připojení %s nelze zavolat stat(): %s Přeskakuje se… �Nelze získat údaje o připojeném zařízení %s: %s �Nad bodem připojení %s nelze zavolat stat(): %s �Nelze vykonat statfs() nad %s: %s �Účtování kvóty %s na %s nelze vypnout, je-li vynucování zapnuto �Kvóty na zařízení %s nelze synchronizovat: %s �Kvóty pro třídu %s na %s nelze vypnout: %s Jádro se nedozví o změnách, které nástroj quotacheck provedl. �Kvóty pro třídu %s na %s nelze zapnout: %s Jádro se nedozví o změnách, které nástroj quotacheck provedl. �Kvóty nelze přes RPC zapnout/vypnout. �Nelze se dočkat dokončení odeslání pošty: %s �Nelze zapsat blok (%u): %s �Do souboru nelze zapsat doby odkladu. �Do souboru nelze zapsat jednotlivé doby odkladu. �Kvótu (ID %u) nelze zapsat: %s �Kvótu pro %u nelze na %s zapsat: %s �Kvóty nelze do souboru zapsat. �Zkontrolováno %d adresářů a %d souborů �Kontrolují se hlavičky kvótového souboru… �Kontrolují se údaje kvótového souboru… �Přeloženo s:%s �Pokračovat v kontrole předpokládaje verzi z příkazového řádku?�Poškozené bloky: �Poškozený počet použitých záznamů (%u)�Soubor s PID „%s“ nebylo možné uzavřít. �Hodnoty pro %s nebylo možné získat. �Soubor s PID „%s“ nelze otevřít: %s �Odebrání souboru s PID nebylo možné zaregistrovat na signál SIGTERM. �Nebylo možné uložit vlastní PID %jd. �PID démona nebylo možné zapsat do „%s“. �Tvorba formátu kvóty %s není podporována. �Data zapsána. �Přístup ke stroji %s zamítnut �Zjištěn formát kvóty %s �Souborový systém ze zařízení (%s) je připojen na nepodporovaném druhu zařízení. Přeskakuje se. �Vypíná se účtování kvót %s na %s �Vypíná se vynucování %2$skvóty %1$s na %3$s �Diskové kvóty pro %s %s (%cid %d): �Diskové kvóty pro %s %s (%cid %u): %s �Neví se, jak bufferovat formát %d �Zapisují se data nasbíraná pro třídu %s. �Zdvojené záznamy.�Volání EXT2_IOC_GETFLAGS selhalo: %s �Zapněte účtování kvót %s při připojení systému �Zapíná se vynucování kvót %s na %s �Zapíná se kvóta pro %s na kořenovém souborovém systému (aby se nastavení projevilo, je třeba rebootovat) �Kvóta %s se na %s již vynucuje �Záznam pro ID %u je zkrácen. �Chyba�Chyba při kontrole názvu zařízení: %s �Chyba rozboru netlinkové zprávy. �Chyba při úpravě dob odkladu. �Chyba při úpravě kvót. �Chyba při získávání staré statistiky kvót z jádra: %s �Chyba při získávání statistiky kvót z jádra: %s �Chyba při otevírání starého kvótového souboru %s: %s �Chyba při uvolňování souboru na %s �Chyba při hledávání starého kvótového souboru %s: %s �Chyba při synchronizaci kvót na %s: %s �Chyba u %s. �Končí se. �Odstranění kvóty selhalo: %s �Nebylo možné nalézt TTY uživatele %llu, kam by se mělo vypsat upozornění. �Otevření TTY %s uživatele %llu, kam by se mělo vypsat upozornění, selhalo. �Rozbor souboru s dobami odkladu se nezdařil. �Netlinkovou zprávu kvóty nebylo možné přečíst nebo rozebrat: %s �Odebrání příznaku NEMĚNITELNOSTI z kvótového souboru %s selhalo: %s �Zprávu nelze zapsat do D-bus: Nedostatek paměti. �Zápis zprávy o kvótě pro uživatele %llu na %s selhal: %s �Údaje souboru hotovy. �Omezení počtu souborů dosaženo na�Souborovy system�Souborový systém užito měkký pevný odklad užito měkký pevný odklad �Systém souborů přepojen pro zápis. �Systém souborů přepojen jen pro čtení �První záznam načten. �Nalezeno neplatné UUID: %s �Nalezen i_num %ld, bloků %ld �Nalezeno více struktur pro ID %u. Použijí se hodnoty: BHARD: %lld BSOFT: %lld IHARD: %lld ISOFT: %lld �Nalezeno více struktur pro ID %u. Hodnoty: BHARD: %lld/%lld BSOFT: %lld/%lld IHARD: %lld/%lld ISOFT: %lld/%lld �Alokace množiny GID (%d): %s �Bude se kontrolovat %s kvótový soubor systému %s �Perioda odkladu před vynucením měkkého limitu pro %s: �Skupina�Hlavičky zkontrolovány. �Hlavičky souboru %s zkontrolovány. Nyní se budou nahrávat data… �Ahoj, Zaznamenali jsme, že skupina %s, jímž jste členem, porušuje na tomto stroji systém kvót. Byla nalezena následující porušení: �Ahoj, zaznamenali jsme, že jste ve sporu se systémem kvót na tomto stroji. Nalezeny byly následující porušení pravidel: �Nalezeno vysoké UID. �ID %u má více struktur. Zásah uživatele nutný (použijte -i pro interaktivní režim nebo -n pro automatickou odpověď). �Zakázaný odkaz volného bloku na blok %u�Zakázané číslo portu: %s �Zakázaný odkaz (%u >= %u) v kvótovém souboru %s na %s. Kvótový soubor je pravděpodobně poškozen. Prosím, spusťte quotacheck(8) a zkuste to znovu. �V periodě odkladu počtu bloků na�V periodě odkladu počtu souborů na�Nesprávný formátovací řetězec proměnné %s. Nerozpoznaný výraz %%%c. �Na vědomí�Iuzel: č. %llu (%'llu bloků, %'u rozsahů) �Iuzel: žádný �Vložení již přítomného záznamu kvóty (blok %u). �Neplatný argument „%s“ �Verze jaderného subsystému kvót: %u.%u.%u �Verze jaderného subsystému kvót: stará �Zjištěna verze LDAP knihovny >= 2.3. Prosím, použijte LDAP_URI namísto názvu stroje a portu. Vytvořené URI: %s �Opouští se %s �Řádek %d je příliš dlouhý. �Načítá se první záznam kvóty s dobami odkladu. �Maximum %u dquot (nyní %u v jádře, %u na seznamu volných) �Možná vytvořit nové kvótové soubory pomocí quotacheck(8)? �Funkce metadat init_io zavolána, když jádro nepodporuje obecné rozhraní pro kvóty! �Funkce metadat init_io zavolána, i když podpora jádra není zapnuta. �Přípojný bod %s není adresářem?! �Bod připojení (nebo zařízení) %s nenalezen nebo nemá zapnuté kvóty. �Nebyl zadán bod připojení. �Název musí být quotaon nebo quotaoff, ne %s �Název kvótového souboru je příliš dlouhý. Kontaktujte %s. �Nezadán žádný správný bod připojení. �Nezadán žádný systém souborů. �Nenalezeny žádné souborové systémy s kvótou. �Zprávy není, kam posílat. Není, co dělat. �Ne všechny použité přípojné body používají kvótu. �Nedostatek paměti pro tvorbu názvu souboru s PID. �Nedostatek paměti. �Nenalezeny žádné poškozené bloky. Blahopřejeme. �Doba odkladu bloků na %s nebude nastavena, protože měkký limit není překročen. �Doba odkladu iuzlů na %s nebude nastavena, protože měkký limit není překročen. �Počet alokovaných dquot: %ld �Počet úspěšných dotazů na dquot v keši: %ld �Počet zahození dquot: %ld �Počet dotazů na dquota: %ld �Počet čtení dquot: %ld �Počet zápisů dquot: %ld �Počet volných dquot: %ld �Počet použitých záznamů dquot (uživatel/skupina): %ld �Počet synchronizací souboru s kvótami: %ld �VYPNUTO�ZAPNUTO�Název starého souboru pro třídu %s nemohl být určen. Místo nebude odečteno. �Starý soubor byl během kontroly odstraněn! �Starý kvótový soubor nenalezen. �Na souborových systémech NFS je povolen jen formát kvóty RPC. �Pouze kvótový formát XFS je povolen na souborovém systému XFS. �Kvóta na počet bloků překročena na�Kvóta na počet souborů přesažena na�Chyba při rozboru řádku %d. Nelze nalézt jméno správce. �Chyba při rozboru řádku %d. Nelze nalézt konec názvu skupiny. �Chyba při rozboru řádku %d. Přebytečné znaky za jménem správce. �Při úpravě periody nebo doby odkladu nedává jméno vzoru smysl. �Vzorový uživatel nemá smysl, když se mění doba odkladu. �Vynucování kvót %s na %s již vypnuto �Kvótový soubor %s má nastaven příznak NEMĚNITELNOSTI (immutable). Příznak odebrán. �Kvótový soubor %s má poškozenou hlavičku. Formát souboru je třeba zadat z příkazového řádku. �Verze formátu kvótového souboru %d neodpovídá formátu uvedenému na příkazovém řádku (%d). Hlavička kvótového souboru může být poškozena. �Kvótový soubor nenalezen nebo má chybný formát. �Kvótový soubor na %s [%s] neexistuje nebo má špatný formát. �Kvóta pro %s je na systému %s zapnuta, takže quotacheck by mohl daný soubor poškodit. �Kvóta pro %s je na systému %s zapnuta, takže quotacheck by mohl daný soubor poškodit. Prosím, kvóty vypněte, nebo kontrolu vynuťte přepínačem „-f“. �Kvóta pro ID %u je odkazována, ale není přítomna. �Formát kvóty není podporován jádrem. �Kvóta není souborovým systémem podporována. �Kvóta na %s je uložena v souborovém systému, a musí se s ní zacházet pomocí nástrojů souborového systému. �Kvótová struktura pro objekt třídy %s vlastnící kvótový soubor není přítomna! Něco se opravdu pokazilo. �Struktura kvóty má pozici na jiném bloku (%u), než by měla (%u). �Kvótové nástroje (quota-tools) verze %s. �Zápis kvóty (ID %u) selhal: %s �Kvótový formát RPC není zakompilován. �Kvótový formát RPC zadán pro ne-NFS souborový systém. �Odkaz na zakázaný blok %u�Nové soubory se přejmenovávají na správné názvy. �Přejmenovává se nový kvótový soubor �Starý kvótový soubor se přejmenovává na %s~ �Repquota nedokáže pracovat přes volání RPC. �Požadovaný formát %s není podporován jádrem. �Prohledává se %s [%s] �Prohledávají se adresáře uložené na zásobníku adresářů �Nastavování periody odkladu na %s není podporováno. �Doby odkladu a příznaku se nastavují na výchozí hodnoty. Předpokládaný počet bloků je %u. �Má se pokračovat?�Mají se použít nové hodnoty?�Velikost souboru: %lu Bloků: %u Volných bloků: %u Bloků z volnými záznamy: %u Příznaky: %x �Přeskakuje se %s [%s] �Řádek bude přeskočen. �Při prohledávání se stalo něco divného. Chyba %d �místa�Zadány přepínače -n i -t, ale použít lze jen jeden z nich. �Zadaná cesta %s není ani adresářem ani zařízením. �Statistika: Celkem bloků: %u Datových bloků: %u Záznamů: %u Průměrně použito: %f �Odečteno %'lu bajtů. �Odečítá se místo zabrané starým kvótovým souborem pro třídu %s. �Bežící jádro nepodporuje XFS �Jednotky času smí být: days (dny), hours (hodiny), minutes (minuty) nebo seconds (sekundy) �Časy vynucení měkkého limitu pro %s %s (%cid %d): �Příliš mnoho parametrů editoru. �Pokus nastavit limit mimo rozsah podporovaný formátem kvóty na %s. �Pokus nastavit zabrané místo mimo rozsah podporovaný formátem kvóty na %s. �Pokus zapsat údaje do kvótového souboru, který je jen pro čtení, na %s. �Pokus zapsat údaje do kvótového souboru, který je jen pro čtení, na %s. �Pokus zapsat kvótu do kvótového souboru, který jen pro čtení, na %s �Jméno „%s“ na řádku %d nelze přeložit. �Název programu není určen. �Hledán neočekávaný stav XFS kvóty na %s �Provedena by měla být neznámá akce. �Neznámý formát netlinkové zprávy z jádra! Nejsou vaše nástroje pro kvótu zastaralé? �Neznámý přepínač „%c“. �Neznámý formát kvót: %s Podporované formáty jsou: vfsold – původní formát kvót vfsv0 – standardní formát kvót vfsv1 – formát kvót s 64bitovými limity rpc – použijí se volání RPC xfs – formát kvót XFS �Použití: %s [PŘEPÍNAČE] Přepínače jsou: -h --help zobrazí tento text -V --version zobrazí údaje o verzi -F --foreground spustí službu kvót na popředí -I --autofs přípojné body připojené pomocí automounteru nebudou ignorovány -p --port PORT poslouchá na zadaném portu -s --no-setquota zakáže vzdálené nastavování kvót (výchozí) -S --setquota povolí vzdálené nastavování kvót -x --xtab CESTA určuje náhradní soubor s tabulkou exportů NFS �Použití: %s [PŘEPÍNAČE] Přepínače jsou: -h --help zobrazí tento text -V --version zobrazí údaje o verzi -F --foreground spustí službu kvót na popředí -I --autofs přípojné body připojené pomocí automounteru nebudou ignorovány -p --port PORT poslouchá na zadaném portu -x --xtab CESTA určuje náhradní soubor s tabulkou exportů NFS �Použití: %s [PŘEPÍNAČE] Přepínače jsou: -h --help zobrazí tento text -V --version zobrazí údaje o verzi -C --no-console zprávy nevypisuje na konzoli -b --print-below na konzoli hlásí rovněž přechody pod pevný/měkký limit -D --no-dbus zprávy nezasílá přes D-bus -F --foreground spustit na popředí �Uživatel�Nástroj pro kontrolu a opravu kvótových souborů. %s [-gucbfinvdmMR] [-F FORMÁT_KVÓTY] SOUBOROVÝ_SYSTÉM|-a -u, --user zkontrolovat soubory uživatele -g, --group zkontrolovat soubory skupiny -c, --create-files vytvořit nové soubory kvót -b, --backup vytvořit zálohy starých souborů kvót -f, --force vynutit kontrolu, i když kvóty jsou zapnuté -i, --interactive interaktivní režim -n, --use-first-dquot použít první kopii zdvojené struktury -v, --verbose zobrazovat podrobnosti -d, --debug zobrazovat ještě více podrobností -m, --no-remount nepřepojovat souborový systém jen pro čtení -M, --try-remount zkusit přepojit souborový systém jen pro čtení, pokračovat, i když se nezdaří -R, --exclude-root vynechat kořenový systém, pokud se kontrolují všechny souborové systémy -F, --format=FORMÁT_KVÓTY zkontrolovat kvótové soubory daného formátu -a, --all zkontrolovat všechny souborové systémy -h, --help zobrazit tuto zprávu a skončit -V, --version zobrazit údaje o verzi a skončit �Nástroj na převod kvótových souborů. Použití: %s [přepínače] bod_připojení -u, --user převede soubor s kvótami uživatelů -g, --group převede soubor s kvótami skupin -e, --convert-endian převede soubor s kvótami na správnou endianitu -f, --convert-format starý,nový převede ze starého formátu do formátu VFSv0 -h, --help zobrazí tuto nápovědu a skončí -V, --version zobrazí informace o verzi a skončí �POZOR – Kvótový soubor %s byl pravděpodobně zkrácen. Nastavení kvót nelze uložit… �POZOR – %s: množství alokovaných bloků nelze změnit �POZOR – %s: množství alokovaných iuzlů nelze změnit �POZOR – Kvótový soubor %s má poškozené hlavičky �POZOR – Kvótový soubor %s byl pravděpodobně zkrácen. Nastavení kvót nelze uložit… �POZOR – Údaje v kvótovém souboru byly poškozeny. �POZOR – Kvótový soubor %s byl pravděpodobně zkrácen. Nastavení kvót nelze uložit… �POZOR – Některé údaje mohly být kvůli poškození pozměněny. �Pozor�Pozor: Tabulku exportů %s nelze otevřít: %s Jako kořen pseudosystému souborů se použije „/“. �Pozor: Příznak EXT2 nelze u %s nastavit: %s �Pozor: Je-li zadán seznam souborových systémů, -%c bude ignorován. �Pozor: Odesílání pošty skončilo mimořádně. �Pozor: Žádný formát kvóty nebyl v jádře rozpoznán. �Statistika quot Správce kvót XFS �XFS kvóty jsou povoleny pouze na souborovém systému XFS. �Musíte určit požadovanou akci. �Musíte zadat zdrojový a cílový formát převodu. �Vaše jádro zjevně podporuje žurnálované kvóty, ale vy je nepoužíváte. Zvažte použití žurnálovaných kvót, což umožňuje se vyhnout pouštění quotacheck po nečistém vypnutí systému. �Váš soubor s kvótami je uložen v chybné endianitě. Prosím, převeďte jej pomocí convertquota(8). �a účtování�chybný formát: %s �limit na bloky dosažen�kvóta na bloky překročena�kvóta na bloky překročena příliš dlouho�bloky�%s nelze na %s [%s] nalézt �Doby pro %s nelze zapsat. Možná jádro takovou operaci nepodporuje. �copy_group_quota_limits: Získání kvót skupiny s ID %ld selhalo: %s �copy_group_quota_limits: Nastavení kvót skupině s ID %ld selhalo: %s �copy_user_quota_limits: Získání kvót uživatele s UID %ld selhalo: %s �copy_user_quota_limits: Nastavení kvót uživateli s UID %ld selhalo: %s �den�dnů�hotovo �chyba (%d) při alokaci bitmapy iuzlů souborů �chyba (%d) při otevírání %s �chyba (%d) při otevírání vyhledávače iuzlů �chyba (%d) při zahájení prohledávání iuzlů �chyba při zjišťování kvóty z %s pro %s (ID %u): %s �chyba (%d) při alokaci bitmapy iuzlů adresářů �limit na soubory dosažen�Kvóta na soubory překročena�kvóta na soubory překročena příliš dlouho�souboru�find_free_dqentry(): Datový blok je plný, ačkoliv by neměl být. �fsname (název souborového systému) se neshoduje �getgroups(): %s �počet bloků klesl pod limit�počet bloků klesl pod kvótu�počet souborů klesl pod limit�počet souborů klesl pod kvótu�odklad�skupina�skupina %s neexistuje. �Stroj %s se pokusil zavolat setquota z portu >= 1024 �Stroj %s se pokusil zavolat setquota, ačkoliv nastavování je zakázáno �hodina�hodin�limit�lstat: Nelze získat údaje o „%s/%s“: %s Bylo by lepší, kdybyste nejprve spustili fsck! Končí se… �minuta�minut�žádný�vypnuto�zapnuto�popd %s Vstupuje se do adresáře %s �pushd %s/%s �kvota�quotactl na %s [%s]: %s �quotactl na %s: %s �quotactl() na %s: %s �sekunda�sekund�nastavení root_squash na %s: %s �místo�Funkce svc_run() se vrátila. �vypne kvóty na všech souborových systémech�zapne kvóty na všech souborových systémech�Argumenty nelze uvolnit �neurčeno�neznámé upozornění kvóty�nenastaveno�uživatel�uživatel %s neexistuje. �použití %s na %s [%s]: %s ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/cs.po���������������������������������������������������������������������������������0000664�0000000�0000000�00000324153�14463210551�0014173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Czech translation of quota-tools. # Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER # msgids are distributed under the same license as particular source files. # msgstrs (i.e. translations) are distributed under GPLv2+. # Petr Pisar <petr.pisar@atlas.cz>, 2010, 2011, 2012. # # grace period → perioda odkladu # grace time → doba odkladu # hard limit → pevný limit # quotafile → kvótový soubor, soubor s kvótami # soft limit → měkký limit # # %s quota file (%s: user, group, unknow) → kvótový soubor pro třídu %s # (%s: uživatel, skupina, neznámý) msgid "" msgstr "" "Project-Id-Version: quota-tools 4.01\n" "Report-Msgid-Bugs-To: jack@suse.cz\n" "POT-Creation-Date: 2022-09-16 13:08+0200\n" "PO-Revision-Date: 2012-09-10 16:55+0200\n" "Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n" "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: bylabel.c:274 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "Nalezeno neplatné UUID: %s\n" #: bylabel.c:294 #, c-format msgid "Error checking device name: %s\n" msgstr "Chyba při kontrole názvu zařízení: %s\n" #: convertquota.c:41 #, c-format msgid "" "Utility for converting quota files.\n" "Usage:\n" "\t%s [options] mountpoint\n" "\n" "-u, --user convert user quota file\n" "-g, --group convert group quota file\n" "-e, --convert-endian convert quota file to correct endianity\n" "-f, --convert-format oldfmt,newfmt convert from old to VFSv0 quota format\n" "-h, --help show this help text and exit\n" "-V, --version output version information and exit\n" "\n" msgstr "" "Nástroj na převod kvótových souborů.\n" "Použití:\n" "\t%s [přepínače] bod_připojení\n" "\n" "-u, --user převede soubor s kvótami uživatelů\n" "-g, --group převede soubor s kvótami skupin\n" "-e, --convert-endian převede soubor s kvótami na správnou\n" " endianitu\n" "-f, --convert-format starý,nový převede ze starého formátu do formátu " "VFSv0\n" "-h, --help zobrazí tuto nápovědu a skončí\n" "-V, --version zobrazí informace o verzi a skončí\n" "\n" #: convertquota.c:48 warnquota.c:1117 quotacheck.c:314 repquota.c:73 #: common.c:131 #, c-format msgid "Bugs to %s\n" msgstr "Chyby hlaste na <%s>\n" #: convertquota.c:97 msgid "You have to specify source and target format of conversion.\n" msgstr "Musíte zadat zdrojový a cílový formát převodu.\n" #: convertquota.c:112 quotacheck.c:400 quotasync.c:88 repquota.c:163 #: quotaon.c:113 setquota.c:264 msgid "Bad number of arguments.\n" msgstr "Špatný počet argumentů.\n" #: convertquota.c:119 msgid "You have to specify action to perform.\n" msgstr "Musíte určit požadovanou akci.\n" #: convertquota.c:166 quotacheck_v2.c:241 quotaio_tree.c:58 #, c-format msgid "Cannot read block %u: %s\n" msgstr "Blok %u nelze přečíst: %s\n" #: convertquota.c:191 convertquota.c:283 #, c-format msgid "Cannot commit dquot for id %u: %s\n" msgstr "Nelze zapsat dquot pro ID %u: %s\n" #: convertquota.c:239 msgid "Cannot read header of old quotafile.\n" msgstr "Hlavičku starého souboru s kvótami nelze přečíst.\n" #: convertquota.c:243 msgid "" "Bad file magic or version (probably not quotafile with bad endianity).\n" msgstr "" "Špatný magický kód nebo verze (pravděpodobně se nejedná o kvótový soubor\n" "s chybnou endianitou).\n" #: convertquota.c:254 msgid "Cannot read information about old quotafile.\n" msgstr "Údaje o starém kvótovém souboru nelze přečíst.\n" #: convertquota.c:296 msgid "Cannot get name of new quotafile.\n" msgstr "Nelze získat název nového souboru s kvótami.\n" #: convertquota.c:302 quotacheck.c:764 #, c-format msgid "Cannot rename new quotafile %s to name %s: %s\n" msgstr "Nový kvótový soubor %s nelze přejmenovat na %s: %s\n" #: convertquota.c:316 #, c-format msgid "Cannot open old format file for %ss on %s\n" msgstr "Nelze otevřít soubor ve starém formátu pro třídu %s na %s\n" #: convertquota.c:321 convertquota.c:354 #, c-format msgid "Cannot create file for %ss for new format on %s: %s\n" msgstr "Nelze vytvořit soubor pro třídu %s v novém formátu na %s: %s\n" #: convertquota.c:344 #, c-format msgid "Cannot open old quota file on %s: %s\n" msgstr "Nelze otevřít starý kvótový soubor na %s: %s\n" #: convertquota.c:381 msgid "Unknown action should be performed.\n" msgstr "Provedena by měla být neznámá akce.\n" #: warnquota.c:59 msgid "" "Hi,\n" "\n" "We noticed that you are in violation with the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" "Ahoj,\n" "\n" "zaznamenali jsme, že jste ve sporu se systémem kvót na tomto stroji.\n" "Nalezeny byly následující porušení pravidel:\n" "\n" #: warnquota.c:61 #, c-format msgid "" "\n" "We hope that you will cleanup before your grace period expires.\n" "\n" "Basically, this means that the system thinks you are using more disk space\n" "on the above partition(s) than you are allowed. If you do not delete files\n" "and get below your quota before the grace period expires, the system will\n" "prevent you from creating new files.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" "\n" "Doufáme, že si uklidíte dříve, než vyprší perioda odkladu.\n" "\n" "V zásadě to znamená, že systém si myslí, že používáte více diskového\n" "prostoru na oddílech uvedených výše, než máte dovoleno. Pokud soubory\n" "nesmažete a nedostanete se pod váš limit před uplynutím periody odkladu,\n" "systém vám bude bránit v tvorbě nových souborů.\n" "\n" "Potřebujete-li pomoc, napište nám na %s\n" "nebo zavolejte na %s.\n" #: warnquota.c:68 #, c-format msgid "" "Hi,\n" "\n" "We noticed that the group %s you are member of violates the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" "Ahoj,\n" "\n" "Zaznamenali jsme, že skupina %s, jímž jste členem, porušuje na tomto\n" "stroji systém kvót. Byla nalezena následující porušení:\n" "\n" #: warnquota.c:70 #, c-format msgid "" "\n" "Please cleanup the group data before the grace period expires.\n" "\n" "Basically, this means that the system thinks group is using more disk space\n" "on the above partition(s) than it is allowed. If you do not delete files\n" "and get below group quota before the grace period expires, the system will\n" "prevent you and other members of the group from creating new files owned by\n" "the group.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" "\n" "Prosíme, abyste uklidili data skupiny před vypršením periody odkladu.\n" "\n" "V zásadě to znamená, že systém si myslí, že skupina používá více diskového\n" "prostoru na oddílech uvedených výše, než má dovoleno. Pokud soubory\n" "nesmažete a nedostanete se pod limit skupiny před uplynutím periody\n" "odkladu, systém vám a dalším členům skupiny bude bránit v tvorbě nových\n" "souborů.\n" "\n" "Potřebujete-li pomoc, napište nám na %s\n" "nebo zavolejte na %s.\n" #: warnquota.c:195 #, c-format msgid "Additional error info: %s\n" msgstr "" #: warnquota.c:209 msgid "ldap_initialize() failed" msgstr "" #: warnquota.c:218 msgid "ldap_start_tls_s() failed" msgstr "" #: warnquota.c:224 msgid "ldap_sasl_bind_s() failed" msgstr "" #: warnquota.c:239 #, c-format msgid "Cannot get name for uid/gid %u.\n" msgstr "UID/GID %u nelze přeložit na jméno.\n" #: warnquota.c:323 #, c-format msgid "Cannot create pipe: %s\n" msgstr "Nelze vytvořit rouru: %s\n" #: warnquota.c:329 #, c-format msgid "Cannot fork: %s\n" msgstr "Voláni fork() selhalo: %s\n" #: warnquota.c:334 #, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "Deskriptor nelze zdvojit: %s\n" #: warnquota.c:338 #, c-format msgid "Cannot execute '%s': %s\n" msgstr "„%s“ nelze spustit: %s\n" #: warnquota.c:343 #, c-format msgid "Cannot open pipe: %s\n" msgstr "Nelze otevřít rouru: %s\n" #: warnquota.c:421 #, fuzzy msgid "Could not setup ldap connection.\n" msgstr "Spojení LDAP nelze nastavit.\n" #: warnquota.c:438 #, c-format msgid "" "Could not format LDAP search filter for %s user and %s search attribute due " "to excessive length.\n" msgstr "" #: warnquota.c:449 #, c-format msgid "Error with %s.\n" msgstr "Chyba u %s.\n" #: warnquota.c:450 msgid "ldap_search_ext_s() failed" msgstr "" #: warnquota.c:456 #, fuzzy, c-format msgid "Multiple entries found for client %s (%d).\n" msgstr "Nalezeno více záznamů pro klienta %s (%d). E-mail nebude odeslán.\n" #: warnquota.c:460 #, fuzzy, c-format msgid "Entry not found for client %s.\n" msgstr "Záznam pro klienta %s nenalezen. E-mail nebude odeslán.\n" #: warnquota.c:470 #, c-format msgid "Could not get values for %s.\n" msgstr "Hodnoty pro %s nebylo možné získat.\n" #: warnquota.c:516 #, c-format msgid "Administrator for a group %s not found. Cancelling mail.\n" msgstr "Správce skupiny %s nenalezen. E-mail zrušen.\n" #: warnquota.c:568 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" "\n" " Limity bloků Limity souborů\n" #: warnquota.c:569 #, c-format msgid "" "Filesystem used soft hard grace used soft hard grace\n" msgstr "" "Souborový systém užito měkký pevný odklad užito měkký pevný odklad\n" #: warnquota.c:609 #, c-format msgid "Cannot wait for mailer: %s\n" msgstr "Nelze se dočkat dokončení odeslání pošty: %s\n" #: warnquota.c:611 msgid "Warning: Mailer exitted abnormally.\n" msgstr "Pozor: Odesílání pošty skončilo mimořádně.\n" #: warnquota.c:668 #, c-format msgid "" "Cannot open %s: %s\n" "Will use device names.\n" msgstr "" "%s nelze otevřít: %s\n" "Použijí se názvy zařízení.\n" #: warnquota.c:691 #, c-format msgid "Cannot parse line %d in quotatab (missing ':')\n" msgstr "V souboru quotatab nelze rozebrat řádek %d (chybí „:“)\n" #: warnquota.c:705 #, c-format msgid "Cannot stat device %s (maybe typo in quotatab)\n" msgstr "O zařízení %s nelze získat údaje (možná překlep v souboru quotatab)\n" #: warnquota.c:725 #, c-format msgid "" "Incorrect format string for variable %s.\n" "Unrecognized expression %%%c.\n" msgstr "" "Nesprávný formátovací řetězec proměnné %s.\n" "Nerozpoznaný výraz %%%c.\n" #: warnquota.c:739 msgid "Ignoring error in config file.\n" msgstr "" #: warnquota.c:741 msgid "" "Aborting. Use option -I if you want warnquota to ignore errors in the config " "file as it used to in older versions.\n" msgstr "" #: warnquota.c:786 #, c-format msgid "Cannot open %s: %s\n" msgstr "%s nelze otevřít: %s\n" #: warnquota.c:808 #, c-format msgid "line %d: Line too long! Maximum is %d.\n" msgstr "" #: warnquota.c:881 #, c-format msgid "Cannot parse time at CC_BEFORE variable (line %d).\n" msgstr "Čas v proměnné CC_BEFORE nelze rozebrat (řádek %d).\n" #: warnquota.c:941 #, c-format msgid "" "line %d: LDAP variable in config file but LDAP support is not compiled.\n" msgstr "" #: warnquota.c:949 #, c-format msgid "line %d: Unknown variable %s in config file.\n" msgstr "" #: warnquota.c:957 #, c-format msgid "line %d: Missing '=' in config file.\n" msgstr "" #: warnquota.c:964 #, fuzzy, c-format msgid "line %d: Unterminated last line.\n" msgstr "Neukončený poslední řádek, ignoruje se.\n" #: warnquota.c:975 #, c-format msgid "Could not format LDAP URI because it's longer than %d bytes.\n" msgstr "" #: warnquota.c:980 #, c-format msgid "" "LDAP library version >= 2.3 detected. Please use LDAP_URI instead of " "hostname and port.\n" "Generated URI %s\n" msgstr "" "Zjištěna verze LDAP knihovny >= 2.3. Prosím, použijte LDAP_URI namísto\n" "názvu stroje a portu.\n" "Vytvořené URI: %s\n" #: warnquota.c:1002 #, c-format msgid "Cannot open file with group administrators: %s\n" msgstr "Soubor se správci skupin nelze otevřít: %s\n" #: warnquota.c:1017 #, c-format msgid "Parse error at line %d. Cannot find end of group name.\n" msgstr "Chyba při rozboru řádku %d. Nelze nalézt konec názvu skupiny.\n" #: warnquota.c:1026 #, c-format msgid "Parse error at line %d. Cannot find administrators name.\n" msgstr "Chyba při rozboru řádku %d. Nelze nalézt jméno správce.\n" #: warnquota.c:1036 #, c-format msgid "" "Parse error at line %d. Trailing characters after administrators name.\n" msgstr "Chyba při rozboru řádku %d. Přebytečné znaky za jménem správce.\n" #: warnquota.c:1099 #, fuzzy msgid "" "Usage:\n" " warnquota [-ugsid] [-F quotaformat] [-c configfile] [-q quotatabfile] [-a " "adminsfile] [filesystem...]\n" "\n" "-u, --user warn users\n" "-g, --group warn groups\n" "-s, --human-readable[=units] display numbers in human friendly units " "(MB,\n" " GB, ...). Units can be also specified\n" " explicitely by an optional argument in " "format\n" " [kgt],[kgt] where the first character " "specifies\n" " space units and the second character " "specifies\n" " inode units\n" "-i, --no-autofs avoid autofs mountpoints\n" "-d, --no-details do not send quota information itself\n" "-F, --format=formatname use quotafiles of specific format\n" "-c, --config=config-file non-default config file\n" "-q, --quota-tab=quotatab-file non-default quotatab\n" "-a, --admins-file=admins-file non-default admins file\n" "-I, --ignore-config-errors\tignore unknown statements in config file\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "Použití:\n" " warnquota [-ugsid] [-F FORMÁT_KVÓT] [-c KONFIGURAČNÍ_SOUBOR]\n" " [-q SOUBOR_QUOTATAB [-a SOUBOR_SE_SPRÁVCI] [SYSTÉM_SOUBORŮ…]\n" "\n" "-u, --user upozorní uživatele\n" "-g, --group upozorní skupiny\n" "-s, --human-readable odesílá údaje v jednotkách vhodných pro\n" " člověka\n" "-i, --no-autofs vynechá přípojné body typu autofs\n" "-d, --no-details neodesílá samotné údaje o kvótách\n" "-F, --format=FORMÁT_KVÓT použije kvótové soubory zadaného formátu\n" "-c, --config=KONFIGURAČNÍ_SOUBOR jiný konfigurační soubor\n" "-q, --quota-tab=SOUBOR_QUOTATAB jiný quotatab\n" "-a, --admins-file=SOUBOR_SE_SPRÁVCI\n" " jiný soubor správců\n" "-h, --help zobrazí tuto nápovědu a skončí\n" "-v, --version zobrazí údaje o verzi a skončí\n" "\n" #: warnquota.c:1174 repquota.c:134 quota.c:350 #, c-format msgid "Bad output format units for human readable output: %s\n" msgstr "" #: warnquota.c:1194 #, c-format msgid "Cannot get host name: %s\n" msgstr "Nelze získat název stroje: %s\n" #: quotacheck.c:92 msgid "Not enough memory.\n" msgstr "Nedostatek paměti.\n" #: quotacheck.c:124 #, c-format msgid "Adding hardlink for inode %llu\n" msgstr "Přidává se pevný odkaz na iuzel %llu\n" #: quotacheck.c:167 #, c-format msgid "Adding dquot structure type %s for %d\n" msgstr "Přidává se struktura dquot typu %s pro %d\n" #: quotacheck.c:253 #, c-format msgid "Cannot open file %s: %s\n" msgstr "Soubor %s nelze otevřít: %s\n" #: quotacheck.c:258 msgid "Cannot get exact used space... Results might be inaccurate.\n" msgstr "" "Nelze zjistit přesné množství zabraného místa. Výsledky mohou být\n" "nepřesné.\n" #: quotacheck.c:296 #, c-format msgid "" "Utility for checking and repairing quota files.\n" "%s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a\n" "\n" "-u, --user check user files\n" "-g, --group check group files\n" "-c, --create-files create new quota files\n" "-b, --backup create backups of old quota files\n" "-f, --force force check even if quotas are enabled\n" "-i, --interactive interactive mode\n" "-n, --use-first-dquot use the first copy of duplicated structure\n" "-v, --verbose print more information\n" "-d, --debug print even more messages\n" "-m, --no-remount do not remount filesystem read-only\n" "-M, --try-remount try remounting filesystem read-only,\n" " continue even if it fails\n" "-R, --exclude-root exclude root when checking all filesystems\n" "-F, --format=formatname check quota files of specific format\n" "-a, --all check all filesystems\n" "-h, --help display this message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "Nástroj pro kontrolu a opravu kvótových souborů.\n" "%s [-gucbfinvdmMR] [-F FORMÁT_KVÓTY] SOUBOROVÝ_SYSTÉM|-a\n" "\n" "-u, --user zkontrolovat soubory uživatele\n" "-g, --group zkontrolovat soubory skupiny\n" "-c, --create-files vytvořit nové soubory kvót\n" "-b, --backup vytvořit zálohy starých souborů kvót\n" "-f, --force vynutit kontrolu, i když kvóty jsou zapnuté\n" "-i, --interactive interaktivní režim\n" "-n, --use-first-dquot použít první kopii zdvojené struktury\n" "-v, --verbose zobrazovat podrobnosti\n" "-d, --debug zobrazovat ještě více podrobností\n" "-m, --no-remount nepřepojovat souborový systém jen pro čtení\n" "-M, --try-remount zkusit přepojit souborový systém jen pro čtení,\n" " pokračovat, i když se nezdaří\n" "-R, --exclude-root vynechat kořenový systém, pokud se kontrolují\n" " všechny souborové systémy\n" "-F, --format=FORMÁT_KVÓTY\n" " zkontrolovat kvótové soubory daného formátu\n" "-a, --all zkontrolovat všechny souborové systémy\n" "-h, --help zobrazit tuto zprávu a skončit\n" "-V, --version zobrazit údaje o verzi a skončit\n" "\n" #: quotacheck.c:427 #, c-format msgid "error (%d) while opening %s\n" msgstr "chyba (%d) při otevírání %s\n" #: quotacheck.c:432 #, c-format msgid "error (%d) while allocating file inode bitmap\n" msgstr "chyba (%d) při alokaci bitmapy iuzlů souborů\n" #: quotacheck.c:437 #, c-format msgid "errstr (%d) while allocating directory inode bitmap\n" msgstr "chyba (%d) při alokaci bitmapy iuzlů adresářů\n" #: quotacheck.c:442 #, c-format msgid "error (%d) while opening inode scan\n" msgstr "chyba (%d) při otevírání vyhledávače iuzlů\n" #: quotacheck.c:447 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "chyba (%d) při zahájení prohledávání iuzlů\n" #: quotacheck.c:455 #, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "Nalezen i_num %ld, bloků %ld\n" #: quotacheck.c:461 msgid "High uid detected.\n" msgstr "Nalezeno vysoké UID.\n" #: quotacheck.c:477 #, c-format msgid "Something weird happened while scanning. Error %d\n" msgstr "Při prohledávání se stalo něco divného. Chyba %d\n" #: quotacheck.c:510 #, c-format msgid "Cannot stat directory %s: %s\n" msgstr "Údaje o adresáři %s nelze získat: %s\n" #: quotacheck.c:522 #, fuzzy, c-format msgid "Cannot chdir to %s: %s\n" msgstr "Údaje o adresáři %s nelze získat: %s\n" #: quotacheck.c:527 #, fuzzy, c-format msgid "" "\n" "Cannot open directory %s: %s\n" msgstr "" "\n" "Adresář %s nelze otevřít: %s\n" #: quotacheck.c:539 #, c-format msgid "" "lstat: Cannot stat `%s/%s': %s\n" "Guess you'd better run fsck first !\n" "exiting...\n" msgstr "" "lstat: Nelze získat údaje o „%s/%s“: %s\n" "Bylo by lepší, kdybyste nejprve spustili fsck!\n" "Končí se…\n" #: quotacheck.c:551 #, c-format msgid "pushd %s/%s\n" msgstr "pushd %s/%s\n" #: quotacheck.c:567 #, c-format msgid "\tAdding %s size %lld ino %d links %d uid %u gid %u\n" msgstr "\tPřidává se %s: velikost %lld iuzel %d odkazů %d, UID %u GID %u\n" #: quotacheck.c:577 msgid "Scanning stored directories from directory stack\n" msgstr "Prohledávají se adresáře uložené na zásobníku adresářů\n" #: quotacheck.c:581 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" "popd %s\n" "Vstupuje se do adresáře %s\n" #: quotacheck.c:593 #, c-format msgid "Leaving %s\n" msgstr "Opouští se %s\n" # FIXME: I18n first argument #: quotacheck.c:633 #, c-format msgid "Going to check %s quota file of %s\n" msgstr "Bude se kontrolovat %s kvótový soubor systému %s\n" # FIXME: I18n first argument #: quotacheck.c:639 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" msgstr "" "Kvóta pro %s je na systému %s zapnuta,\n" "takže quotacheck by mohl daný soubor poškodit.\n" #: quotacheck.c:640 quotacheck.c:966 msgid "Should I continue?" msgstr "Má se pokračovat?" #: quotacheck.c:641 quotacheck.c:967 #, c-format msgid "As you wish... Canceling check of this file.\n" msgstr "Jak si přejete. Kontrola tohoto souboru se ruší.\n" #: quotacheck.c:646 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" "Please turn quotas off or use -f to force checking.\n" msgstr "" "Kvóta pro %s je na systému %s zapnuta,\n" "takže quotacheck by mohl daný soubor poškodit. Prosím, kvóty vypněte,\n" "nebo kontrolu vynuťte přepínačem „-f“.\n" #: quotacheck.c:653 #, c-format msgid "Error while syncing quotas on %s: %s\n" msgstr "Chyba při synchronizaci kvót na %s: %s\n" #: quotacheck.c:658 #, c-format msgid "Cannot get quotafile name for %s\n" msgstr "Nelze získat název kvótového souboru pro %s\n" #: quotacheck.c:663 quotaio.c:151 quotasys.c:844 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "Kvótový soubor %s nelze otevřít: %s\n" #: quotacheck.c:702 msgid "Renaming new files to proper names.\n" msgstr "Nové soubory se přejmenovávají na správné názvy.\n" #: quotacheck.c:704 #, c-format msgid "Cannot get name of old quotafile on %s.\n" msgstr "Nelze zjistit název starého kvótového souboru na %s.\n" #: quotacheck.c:707 msgid "Old file not found.\n" msgstr "Starý kvótový soubor nenalezen.\n" #: quotacheck.c:710 #, c-format msgid "Error while searching for old quota file %s: %s\n" msgstr "Chyba při hledávání starého kvótového souboru %s: %s\n" #: quotacheck.c:719 msgid "Old file found removed during check!\n" msgstr "Starý soubor byl během kontroly odstraněn!\n" #: quotacheck.c:722 #, c-format msgid "Error while opening old quota file %s: %s\n" msgstr "Chyba při otevírání starého kvótového souboru %s: %s\n" #: quotacheck.c:728 #, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "Volání EXT2_IOC_GETFLAGS selhalo: %s\n" #: quotacheck.c:732 #, c-format msgid "Quota file %s has IMMUTABLE flag set. Clearing.\n" msgstr "" "Kvótový soubor %s má nastaven příznak\n" "NEMĚNITELNOSTI (immutable). Příznak odebrán.\n" #: quotacheck.c:735 #, c-format msgid "Failed to remove IMMUTABLE flag from quota file %s: %s\n" msgstr "Odebrání příznaku NEMĚNITELNOSTI z kvótového souboru %s selhalo: %s\n" #: quotacheck.c:744 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "Starý kvótový soubor se přejmenovává na %s~\n" #: quotacheck.c:750 #, c-format msgid "Name of quota file too long. Contact %s.\n" msgstr "Název kvótového souboru je příliš dlouhý. Kontaktujte %s.\n" #: quotacheck.c:752 #, c-format msgid "Cannot rename old quotafile %s to %s: %s\n" msgstr "Starý kvótový soubor %s nelze přejmenovat na %s: %s\n" #: quotacheck.c:758 msgid "Renaming new quotafile\n" msgstr "Přejmenovává se nový kvótový soubor\n" #: quotacheck.c:770 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "Nelze změnit práva souboru %s: %s\n" #: quotacheck.c:777 #, c-format msgid "Cannot open new quota file %s: %s\n" msgstr "Nový kvótový soubor %s nelze otevřít: %s\n" #: quotacheck.c:782 #, c-format msgid "Warning: Cannot set EXT2 flags on %s: %s\n" msgstr "Pozor: Příznak EXT2 nelze u %s nastavit: %s\n" #: quotacheck.c:802 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "Zapisují se data nasbíraná pro třídu %s.\n" #: quotacheck.c:805 #, c-format msgid "Cannot initialize IO on xfs/gfs2 quotafile: %s\n" msgstr "Nelze inicializovat I/O na kvótovém souboru XFS/GFS2: %s\n" #: quotacheck.c:811 #, c-format msgid "Cannot initialize IO on new quotafile: %s\n" msgstr "Nelze inicializovat I/O na novém kvótovém souboru: %s\n" #: quotacheck.c:838 #, c-format msgid "Cannot finish IO on new quotafile: %s\n" msgstr "Nelze dokončit I/O na novém kvótovém souboru: %s\n" #: quotacheck.c:841 msgid "Data dumped.\n" msgstr "Data zapsána.\n" #: quotacheck.c:849 #, c-format msgid "Cannot find checked quota file for %ss on %s!\n" msgstr "Nelze najít kontrolovaný kvótový soubor pro třídu %s na %s!\n" #: quotacheck.c:853 #, c-format msgid "" "Cannot turn %s quotas off on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" "Kvóty pro třídu %s na %s nelze vypnout: %s\n" "Jádro se nedozví o změnách, které nástroj quotacheck provedl.\n" #: quotacheck.c:866 #, c-format msgid "" "Cannot turn %s quotas on on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" "Kvóty pro třídu %s na %s nelze zapnout: %s\n" "Jádro se nedozví o změnách, které nástroj quotacheck provedl.\n" #: quotacheck.c:892 #, c-format msgid "Substracting space used by old %s quota file.\n" msgstr "Odečítá se místo zabrané starým kvótovým souborem pro třídu %s.\n" #: quotacheck.c:894 #, c-format msgid "" "Old %s file name could not been determined. Usage will not be subtracted.\n" msgstr "" "Název starého souboru pro třídu %s nemohl být určen. Místo nebude odečteno.\n" #: quotacheck.c:899 #, c-format msgid "Cannot stat old %s quota file %s: %s. Usage will not be subtracted.\n" msgstr "" "Nebylo možné zjistit údaje o starém kvótovém souboru %2$s pro třídu %1$s:\n" "%3$s. Místo nebude odečteno.\n" #: quotacheck.c:911 #, c-format msgid "" "Quota structure for %s owning quota file not present! Something is really " "wrong...\n" msgstr "" "Kvótová struktura pro objekt třídy %s vlastnící kvótový soubor není\n" "přítomna! Něco se opravdu pokazilo.\n" # FIXME: plural #: quotacheck.c:916 #, c-format msgid "Substracted %lu bytes.\n" msgstr "Odečteno %'lu bajtů.\n" #: quotacheck.c:930 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "Nelze získat údaje o přípojném bodu %s: %s\n" #: quotacheck.c:932 #, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "Přípojný bod %s není adresářem?!\n" #: quotacheck.c:965 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only. Counted values might not " "be right.\n" msgstr "" "Souborový systém připojený do %s nelze přepojit\n" "jen pro čtení. Vypočtené hodnoty nemusí být správné.\n" #: quotacheck.c:973 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only so counted values might " "not be right.\n" "Please stop all programs writing to filesystem or use -m flag to force " "checking.\n" msgstr "" "Souborový systém připojený do %s nelze přepojit\n" "jen pro čtení, tudíž vypočtené hodnoty nemusí být správné.\n" "Prosím, zastavte všechny programy zapisující do souborového systému, nebo\n" "kontrolu vynuťte přepínačem -m.\n" #: quotacheck.c:981 msgid "Filesystem remounted read-only\n" msgstr "Systém souborů přepojen jen pro čtení\n" #: quotacheck.c:984 #, c-format msgid "Scanning %s [%s] " msgstr "Prohledává se %s [%s] " #: quotacheck.c:1010 msgid "done\n" msgstr "hotovo\n" # FIXME: plurals #: quotacheck.c:1019 #, c-format msgid "Checked %d directories and %d files\n" msgstr "Zkontrolováno %d adresářů a %d souborů\n" #: quotacheck.c:1023 #, c-format msgid "" "Cannot remount filesystem %s read-write. cannot write new quota files.\n" msgstr "" "Systém souborů %s nelze přepojit pro zápis. Nový soubor\n" "s kvótami nelze zapsat.\n" #: quotacheck.c:1024 msgid "Filesystem remounted RW.\n" msgstr "Systém souborů přepojen pro zápis.\n" #: quotacheck.c:1068 #, c-format msgid "Cannot find quota option on filesystem %s with quotas!\n" msgstr "U souborového systému %s s kvótami nelze nalézt kvótový parametr!\n" #: quotacheck.c:1074 #, c-format msgid "Cannot detect quota format for journalled quota on %s\n" msgstr "U žurnálované kvóty na %s nelze určit formát\n" #: quotacheck.c:1140 quotasys.c:1610 #, c-format msgid "Cannot get system info: %s\n" msgstr "Nelze získat údaje o systému: %s\n" #: quotacheck.c:1171 quotasys.c:934 msgid "Cannot initialize mountpoint scan.\n" msgstr "Prohledávání bodu připojení nelze inicializovat.\n" #: quotacheck.c:1176 #, c-format msgid "Skipping %s [%s]\n" msgstr "Přeskakuje se %s [%s]\n" #: quotacheck.c:1193 #, c-format msgid "" "Cannot guess format from filename on %s. Please specify format on " "commandline.\n" msgstr "" "Z názvu souboru na %s nelze uhádnout formát.\n" "Prosím, zadejte formát na příkazovém řádku.\n" #: quotacheck.c:1198 #, c-format msgid "Detected quota format %s\n" msgstr "Zjištěn formát kvóty %s\n" #: quotacheck.c:1205 quotaon.c:276 msgid "" "Your kernel probably supports ext4 quota feature but you are using external " "quota files. Please switch your filesystem to use ext4 quota feature as " "external quota files on ext4 are deprecated. You can enable the feature by " "unmounting the file system and running 'tune2fs -O quota <device>'.\n" msgstr "" #  FXIME: msgid misses new lines. #: quotacheck.c:1223 msgid "" "Your kernel probably supports journaled quota but you are not using it. " "Consider switching to journaled quota to avoid running quotacheck after an " "unclean shutdown.\n" msgstr "" "Vaše jádro zjevně podporuje žurnálované kvóty, ale vy je nepoužíváte.\n" "Zvažte použití žurnálovaných kvót, což umožňuje se vyhnout pouštění\n" "quotacheck po nečistém vypnutí systému.\n" #: quotacheck.c:1236 msgid "" "Cannot find filesystem to check or filesystem not mounted with quota " "option.\n" msgstr "" "Nelze nalézt systém souborů určený ke kontrole nebo systém souborů není\n" "připojen s kvótovým parametrem.\n" # FIXME: plurals #: quotacheck.c:1254 #, c-format msgid "" "Allocated %d bytes memory\n" "Free'd %d bytes\n" "Lost %d bytes\n" msgstr "" "Alokováno %'d bajtů paměti\n" "Uvolněno %'d bajtů\n" "Ztraceno %'d bajtů\n" #: quotasync.c:29 #, fuzzy, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ugP] mount-point...\n" " or: %1$s [-ugP] -a\n" " or: %1$s -h | -V\n" "\n" msgstr "" "Nástroj pro synchronizaci kvót.\n" "Použití:\n" "%s [-ug] -a | PŘÍPOJNÝ_BOD…\n" "\n" #: quotasync.c:36 #, fuzzy, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group quotas\n" "-P, --project synchronize project quotas\n" "-a, --all synchronize quotas for all mounted file systems\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "-t, --edit-period změní periodu odkladu\n" "-T, --edit-times změní dobu odkladu pro uživatele/skupinu\n" "-h, --help zobrazí tuto nápovědu a skončí\n" "-V, --version zobrazí údaje o verzi a skončí\n" "\n" #: quotasync.c:45 #, fuzzy, c-format msgid "Report bugs to <%s>.\n" msgstr "Chyby hlaste na <%s>\n" # TODO: quota attribute #: quotasync.c:113 #, c-format msgid "%s quota sync failed: %s\n" msgstr "synchronizace kvóty %s selhala: %s\n" #: quotasync.c:126 #, c-format msgid "%s quota sync failed for %s: %s\n" msgstr "synchronizace kvóty %s na %s selhala: %s\n" # kvótový soubor pro třídu %s #: quota.h:22 msgid "user" msgstr "uživatel" # kvótový soubor pro třídu %s #: quota.h:23 msgid "group" msgstr "skupina" #: quota.h:24 msgid "project" msgstr "" # kvótový soubor pro třídu %s #: quota.h:25 msgid "undefined" msgstr "neurčeno" #: quota_nld.c:85 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -C --no-console do not try to write messages to console\n" " -b --print-below write to console also information about getting below " "hard/soft limits\n" " -D --no-dbus do not try to write messages to DBUS\n" " -F --foreground run daemon in foreground\n" msgstr "" "Použití: %s [PŘEPÍNAČE]\n" "Přepínače jsou:\n" " -h --help zobrazí tento text\n" " -V --version zobrazí údaje o verzi\n" " -C --no-console zprávy nevypisuje na konzoli\n" " -b --print-below na konzoli hlásí rovněž přechody pod pevný/měkký limit\n" " -D --no-dbus zprávy nezasílá přes D-bus\n" " -F --foreground spustit na popředí\n" #: quota_nld.c:119 rquota_svc.c:158 #, c-format msgid "Unknown option '%c'.\n" msgstr "Neznámý přepínač „%c“.\n" #: quota_nld.c:125 msgid "No possible destination for messages. Nothing to do.\n" msgstr "Zprávy není, kam posílat. Není, co dělat.\n" #: quota_nld.c:151 msgid "Error parsing netlink message.\n" msgstr "Chyba rozboru netlinkové zprávy.\n" #: quota_nld.c:158 msgid "" "Unknown format of kernel netlink message!\n" "Maybe your quota tools are too old?\n" msgstr "" "Neznámý formát netlinkové zprávy z jádra!\n" "Nejsou vaše nástroje pro kvótu zastaralé?\n" #: quota_nld.c:182 #, fuzzy msgid "Cannot allocate netlink socket!\n" msgstr "Nelze alokovat deskriptor netlinku!\n" #: quota_nld.c:188 #, c-format msgid "Cannot register callback for netlink messages: %s\n" msgstr "Zpětné volání pro netlinkové zprávy nelze zaregistrovat: %s\n" #: quota_nld.c:193 #, c-format msgid "Cannot connect to netlink socket: %s\n" msgstr "Na netlinkový socket se nelze připojit: %s\n" #: quota_nld.c:205 #, c-format msgid "Cannot resolve quota netlink name: %s\n" msgstr "Nelze přeložit netlinkový název kvóty: %s\n" #: quota_nld.c:211 #, c-format msgid "Cannot join quota multicast group: %s\n" msgstr "Nelze se připojit k multicastové skupině kvóty: %s\n" #: quota_nld.c:224 #, c-format msgid "Cannot connect to system DBUS: %s\n" msgstr "Nelze se připojit k systémové sběrnici D-bus: %s\n" #: quota_nld.c:292 #, c-format msgid "Failed to find tty of user %llu to report warning to.\n" msgstr "" "Nebylo možné nalézt TTY uživatele %llu, kam by se mělo vypsat upozornění.\n" #: quota_nld.c:297 #, c-format msgid "Failed to open tty %s of user %llu to report warning.\n" msgstr "" "Otevření TTY %s uživatele %llu, kam by se mělo vypsat upozornění, selhalo.\n" #: quota_nld.c:303 msgid "Warning" msgstr "Pozor" #: quota_nld.c:306 msgid "Error" msgstr "Chyba" #: quota_nld.c:308 msgid "Info" msgstr "Na vědomí" #: quota_nld.c:311 msgid "file limit reached" msgstr "limit na soubory dosažen" #: quota_nld.c:314 msgid "file quota exceeded too long" msgstr "kvóta na soubory překročena příliš dlouho" #: quota_nld.c:317 msgid "file quota exceeded" msgstr "Kvóta na soubory překročena" #: quota_nld.c:320 msgid "block limit reached" msgstr "limit na bloky dosažen" #: quota_nld.c:323 msgid "block quota exceeded too long" msgstr "kvóta na bloky překročena příliš dlouho" #: quota_nld.c:326 msgid "block quota exceeded" msgstr "kvóta na bloky překročena" #: quota_nld.c:329 msgid "got below file limit" msgstr "počet souborů klesl pod limit" #: quota_nld.c:332 msgid "got below file quota" msgstr "počet souborů klesl pod kvótu" #: quota_nld.c:335 msgid "got below block limit" msgstr "počet bloků klesl pod limit" #: quota_nld.c:338 msgid "got below block quota" msgstr "počet bloků klesl pod kvótu" #: quota_nld.c:341 msgid "unknown quota warning" msgstr "neznámé upozornění kvóty" #: quota_nld.c:345 #, c-format msgid "Failed to write quota message for user %llu to %s: %s\n" msgstr "Zápis zprávy o kvótě pro uživatele %llu na %s selhal: %s\n" #: quota_nld.c:358 msgid "Cannot create DBUS message: No enough memory.\n" msgstr "Zprávu D-bus nelze vytvořit: Nedostatek paměti.\n" #: quota_nld.c:376 msgid "Failed to write message to dbus: No enough memory.\n" msgstr "Zprávu nelze zapsat do D-bus: Nedostatek paměti.\n" #: quota_nld.c:392 #, c-format msgid "Failed to read or parse quota netlink message: %s\n" msgstr "Netlinkovou zprávu kvóty nebylo možné přečíst nebo rozebrat: %s\n" #: quota_nld.c:403 msgid "Undefined program name.\n" msgstr "Název programu není určen.\n" #: quota_nld.c:408 msgid "Not enough memory to build PID file name.\n" msgstr "Nedostatek paměti pro tvorbu názvu souboru s PID.\n" #: quota_nld.c:427 #, c-format msgid "Could not open PID file '%s': %s\n" msgstr "Soubor s PID „%s“ nelze otevřít: %s\n" #: quota_nld.c:433 #, c-format msgid "Could not write daemon's PID into '%s'.\n" msgstr "PID démona nebylo možné zapsat do „%s“.\n" #: quota_nld.c:440 #, c-format msgid "Could not close PID file '%s'.\n" msgstr "Soubor s PID „%s“ nebylo možné uzavřít.\n" #: quota_nld.c:470 msgid "Could not register PID file removal on SIGTERM.\n" msgstr "Odebrání souboru s PID nebylo možné zaregistrovat na signál SIGTERM.\n" #: quota_nld.c:472 #, c-format msgid "Could not store my PID %jd.\n" msgstr "Nebylo možné uložit vlastní PID %jd.\n" #: quota_nld.c:489 rquota_svc.c:537 #, fuzzy, c-format msgid "Failed to daemonize: %s\n" msgstr "Odstranění kvóty selhalo: %s\n" #: repquota.c:51 #, fuzzy, c-format msgid "" "Utility for reporting quotas.\n" "Usage:\n" "%s [-vugsi] [-c|C] [-t|n] [-F quotaformat] [-O (default | xml | csv)] (-a | " "mntpoint)\n" "\n" "-v, --verbose display also users/groups without any usage\n" "-u, --user display information about users\n" "-g, --group display information about groups\n" "-P, --project display information about projects\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" "-t, --truncate-names truncate names to 9 characters\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-n, --no-names do not translate uid/gid to name\n" "-i, --no-autofs avoid autofs mountpoints\n" "-c, --cache translate big number of ids at once\n" "-C, --no-cache translate ids one by one\n" "-F, --format=formatname report information for specific format\n" "-O, --output=format format output as xml or csv\n" "-a, --all report information for all mount points with\n" " quotas\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "Nástroj pro hlášení kvót.\n" "Použití:\n" "%s [-vugsi] [-c|C] [-t|n] [-F FORMÁT_KVÓTY (-a | BOD_PŘIPOJENÍ)\n" "\n" "-v, --verbose zobrazí rovněž uživatele/skupiny, které žádné\n" " místo nezabírají\n" "-u, --user zobrazí údaje o uživatelích\n" "-g, --group zobrazí údaje o skupinách\n" "-s, --human-readable zobrazí počty v podobě vhodné přo člověka\n" " (MB, GB, …)\n" "-t, --truncate-names názvy zkrátí na 9 znaků\n" "-p, --raw-grace dobu odkladu zobrazí v sekundách od počátku " "epochy\n" "-n, --no-names nepřekládá UID/GID na jména\n" "-i, --no-autofs nezaobírá se přípojnými body typu autofs\n" "-c, --batch-translation překládá identifikátory ve velkých dávkách\n" "-C, --no-batch-translation překládá identifikátory po jednom\n" "-F, --format=FORMÁT_KVÓTY hlásí údaje u zadaného formátu\n" "-h, --help zobrazí tuto nápovědu a skončí\n" "-V, --version zobrazí údaje o verzi a skončí\n" "\n" #: repquota.c:167 msgid "Repquota cannot report through RPC calls.\n" msgstr "Repquota nedokáže pracovat přes volání RPC.\n" #: repquota.c:171 msgid "Specified both -n and -t but only one of them can be used.\n" msgstr "Zadány přepínače -n i -t, ale použít lze jen jeden z nich.\n" #: repquota.c:375 msgid "User" msgstr "Uživatel" #: repquota.c:377 msgid "Group" msgstr "Skupina" #: repquota.c:379 msgid "Project" msgstr "" # TODO: Internationalize first argument #: repquota.c:382 #, c-format msgid "*** Report for %s quotas on device %s\n" msgstr "*** Hlášení pro kvóty %s na zařízení %s\n" # This is first argument of `%s limits' header #: repquota.c:391 msgid "Space" msgstr "místa" # This is first argument of `%s limits' header #: repquota.c:393 msgid "Block" msgstr "bloků" #: repquota.c:394 #, c-format msgid "Block grace time: %s; Inode grace time: %s\n" msgstr "Doba odkladu bloků: %s, Doba odkladu i-uzlů: %s\n" #: repquota.c:395 #, c-format msgid " %s limits File limits\n" msgstr " Limity %s Limity souborů\n" #: repquota.c:396 #, c-format msgid "%-9s used soft hard grace used soft hard grace\n" msgstr "%-9s užito měkký pevný odklad užito měkký pevný odklad\n" #: quotacheck_v1.c:32 #, c-format msgid "Cannot read entry for id %u from quotafile %s: %s\n" msgstr "Z kvótového souboru %2$s nelze přečíst záznam pro ID %1$u: %3$s\n" #: quotacheck_v1.c:35 #, c-format msgid "Entry for id %u is truncated.\n" msgstr "Záznam pro ID %u je zkrácen.\n" #: quotacheck_v1.c:64 msgid "Loading first quota entry with grace times.\n" msgstr "Načítá se první záznam kvóty s dobami odkladu.\n" #: quotacheck_v1.c:68 #, c-format msgid "Cannot read first entry from quotafile %s: %s\n" msgstr "Z kvótového souboru %s nelze načíst první záznam: %s\n" # FIXME: duplicated message to quotacheck_v2.c:65 #: quotacheck_v1.c:72 #, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "POZOR – Kvótový soubor %s byl pravděpodobně zkrácen. Nastavení kvót\n" "nelze uložit…\n" #: quotacheck_v1.c:78 msgid "First entry loaded.\n" msgstr "První záznam načten.\n" #: quotacheck_v2.c:55 msgid "Checking quotafile info...\n" msgstr "Kontrolují se údaje kvótového souboru…\n" #: quotacheck_v2.c:60 #, c-format msgid "Cannot read info from quota file %s: %s\n" msgstr "Údaje z kvótového souboru %s nelze přečíst: %s\n" #: quotacheck_v2.c:65 #, c-format msgid "" "WARNING - Quota file %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "POZOR – Kvótový soubor %s byl pravděpodobně zkrácen. Nastavení kvót\n" "nelze uložit…\n" #: quotacheck_v2.c:77 msgid "WARNING - Quota file info was corrupted.\n" msgstr "POZOR – Údaje v kvótovém souboru byly poškozeny.\n" #: quotacheck_v2.c:78 #, c-format msgid "" "Size of file: %lu\n" "Blocks: %u Free block: %u Block with free entry: %u Flags: %x\n" msgstr "" "Velikost souboru: %lu\n" "Bloků: %u Volných bloků: %u Bloků z volnými záznamy: %u Příznaky: %x\n" #: quotacheck_v2.c:85 #, c-format msgid "" "Setting grace times and other flags to default values.\n" "Assuming number of blocks is %u.\n" msgstr "" "Doby odkladu a příznaku se nastavují na výchozí hodnoty.\n" "Předpokládaný počet bloků je %u.\n" #: quotacheck_v2.c:102 msgid "File info done.\n" msgstr "Údaje souboru hotovy.\n" #: quotacheck_v2.c:113 msgid "Corrupted blocks: " msgstr "Poškozené bloky: " #: quotacheck_v2.c:117 #, c-format msgid "Block %u: " msgstr "Blok %u: " #: quotacheck_v2.c:179 msgid "Duplicated entries." msgstr "Zdvojené záznamy." #: quotacheck_v2.c:183 #, c-format msgid "" "Found more structures for ID %u. Using values: BHARD: %lld BSOFT: %lld " "IHARD: %lld ISOFT: %lld\n" msgstr "" "Nalezeno více struktur pro ID %u. Použijí se hodnoty:\n" "\tBHARD: %lld BSOFT: %lld IHARD: %lld ISOFT: %lld\n" #: quotacheck_v2.c:191 #, c-format msgid "" "Found more structures for ID %u. Values: BHARD: %lld/%lld BSOFT: %lld/%lld " "IHARD: %lld/%lld ISOFT: %lld/%lld\n" msgstr "" "Nalezeno více struktur pro ID %u. Hodnoty:\n" "\tBHARD: %lld/%lld BSOFT: %lld/%lld IHARD: %lld/%lld ISOFT: %lld/%lld\n" #: quotacheck_v2.c:196 msgid "Should I use new values?" msgstr "Mají se použít nové hodnoty?" #: quotacheck_v2.c:206 #, c-format msgid "" "ID %u has more structures. User intervention needed (use -i for interactive " "mode or -n for automatic answer).\n" msgstr "" "ID %u má více struktur. Zásah uživatele nutný (použijte -i pro\n" "interaktivní režim nebo -n pro automatickou odpověď).\n" #: quotacheck_v2.c:243 #, c-format msgid "Block %u is truncated.\n" msgstr "Zkráceno %u bloků.\n" #: quotacheck_v2.c:252 #, c-format msgid "Reference to illegal block %u" msgstr "Odkaz na zakázaný blok %u" #: quotacheck_v2.c:259 #, c-format msgid "Block %u in tree referenced twice" msgstr "Blok %u odkazován ve stromě dvakrát" #: quotacheck_v2.c:275 #, c-format msgid "Illegal free block reference to block %u" msgstr "Zakázaný odkaz volného bloku na blok %u" #: quotacheck_v2.c:278 #, c-format msgid "Corrupted number of used entries (%u)" msgstr "Poškozený počet použitých záznamů (%u)" #: quotacheck_v2.c:330 #, c-format msgid "" "Quota file %s has corrupted headers. You have to specify quota format on " "command line.\n" msgstr "" "Kvótový soubor %s má poškozenou hlavičku. Formát souboru je třeba\n" "zadat z příkazového řádku.\n" #: quotacheck_v2.c:346 msgid "Checking quotafile headers...\n" msgstr "Kontrolují se hlavičky kvótového souboru…\n" #: quotacheck_v2.c:350 #, c-format msgid "Cannot read header from quotafile %s: %s\n" msgstr "Z kvótového souboru %s nelze přečíst hlavičku: %s\n" # FIXME: duplicated message to quotacheck_v2.c:65 #: quotacheck_v2.c:352 #, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "POZOR – Kvótový soubor %s byl pravděpodobně zkrácen. Nastavení kvót\n" "nelze uložit…\n" #: quotacheck_v2.c:358 #, c-format msgid "WARNING - Quota file %s has corrupted headers\n" msgstr "POZOR – Kvótový soubor %s má poškozené hlavičky\n" #: quotacheck_v2.c:361 #, fuzzy msgid "Continue checking assuming format from command line?" msgstr "Pokračovat v kontrole předpokládaje verzi z příkazového řádku?" #: quotacheck_v2.c:365 #, c-format msgid "" "Quota file format version %d does not match the one specified on command " "line (%d). Quota file header may be corrupted.\n" msgstr "" "Verze formátu kvótového souboru %d neodpovídá formátu uvedenému na\n" "příkazovém řádku (%d). Hlavička kvótového souboru může být poškozena.\n" #: quotacheck_v2.c:370 msgid "Continue checking assuming version from command line?" msgstr "Pokračovat v kontrole předpokládaje verzi z příkazového řádku?" #: quotacheck_v2.c:376 msgid "Headers checked.\n" msgstr "Hlavičky zkontrolovány.\n" #: quotacheck_v2.c:392 #, c-format msgid "Do not know how to buffer format %d\n" msgstr "Neví se, jak bufferovat formát %d\n" #: quotacheck_v2.c:402 #, c-format msgid "Headers of file %s checked. Going to load data...\n" msgstr "Hlavičky souboru %s zkontrolovány. Nyní se budou nahrávat data…\n" #: quotacheck_v2.c:410 msgid "Cannot gather quota data. Tree root node corrupted.\n" msgstr "Nelze posbírat údaje o kvótách. Kořenový uzel stromu je poškozen.\n" #: quotacheck_v2.c:418 msgid "WARNING - Some data might be changed due to corruption.\n" msgstr "POZOR – Některé údaje mohly být kvůli poškození pozměněny.\n" #: quotacheck_v2.c:421 msgid "Not found any corrupted blocks. Congratulations.\n" msgstr "Nenalezeny žádné poškozené bloky. Blahopřejeme.\n" #: quotaio.c:62 msgid "Only RPC quota format is allowed on NFS filesystem.\n" msgstr "Na souborových systémech NFS je povolen jen formát kvóty RPC.\n" #: quotaio.c:73 msgid "RPC quota format not compiled.\n" msgstr "Kvótový formát RPC není zakompilován.\n" #: quotaio.c:77 msgid "RPC quota format specified for non-NFS filesystem.\n" msgstr "Kvótový formát RPC zadán pro ne-NFS souborový systém.\n" #: quotaio.c:85 msgid "Only XFS quota format is allowed on XFS filesystem.\n" msgstr "Pouze kvótový formát XFS je povolen na souborovém systému XFS.\n" #: quotaio.c:96 msgid "XFS quota allowed only on XFS filesystem.\n" msgstr "XFS kvóty jsou povoleny pouze na souborovém systému XFS.\n" #: quotaio.c:110 msgid "Quota not supported by the filesystem.\n" msgstr "Kvóta není souborovým systémem podporována.\n" #: quotaio.c:130 msgid "Cannot find any quota file to work on.\n" msgstr "Nenalezeny žádné kvótové souboru ke zpracování.\n" #: quotaio.c:135 msgid "Quota file not found or has wrong format.\n" msgstr "Kvótový soubor nenalezen nebo má chybný formát.\n" #: quotaio.c:145 #, c-format msgid "Cannot sync quotas on device %s: %s\n" msgstr "Kvóty na zařízení %s nelze synchronizovat: %s\n" #: quotaio.c:176 #, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "Kvóty na %s nelze inicializovat: %s\n" #: quotaio.c:203 #, c-format msgid "Creation of %s quota format is not supported.\n" msgstr "Tvorba formátu kvóty %s není podporována.\n" #: quotaio.c:213 #, c-format msgid "" "Quota on %s is stored in system files and must be manipulated by fs tools.\n" msgstr "" "Kvóta na %s je uložena v souborovém systému, a musí se s ní\n" "zacházet pomocí nástrojů souborového systému.\n" #: quotaio.c:223 #, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "Nový kvótový soubor %s nelze vytvořit: %s\n" #: quotaio.c:297 #, c-format msgid "" "Trying to set quota limits out of range supported by quota format on %s.\n" msgstr "Pokus nastavit limit mimo rozsah podporovaný formátem kvóty na %s.\n" #: quotaio.c:303 #, c-format msgid "" "Trying to set quota usage out of range supported by quota format on %s.\n" msgstr "" "Pokus nastavit zabrané místo mimo rozsah podporovaný formátem kvóty na %s.\n" #: quotaio_generic.c:54 #, c-format msgid "Cannot get info for %s quota file from kernel on %s: %s\n" msgstr "Z jádra nelze získat údaje o kvótovém souboru %s na %s: %s\n" #: quotaio_generic.c:72 #, c-format msgid "Cannot set info for %s quota file from kernel on %s: %s\n" msgstr "Z jádra nelze nastavit údaje o kvótovém souboru %s na %s: %s\n" #: quotaio_generic.c:84 #, c-format msgid "Cannot get quota for %s %d from kernel on %s: %s\n" msgstr "Z jádra nelze získat kvótu pro %s %d na %s: %s\n" #: quotaio_generic.c:99 #, c-format msgid "Cannot set quota for %s %d from kernel on %s: %s\n" msgstr "Z jádra nelze nastavit kvótu pro %s %d na %s: %s\n" #: quotaio_meta.c:23 msgid "Metadata init_io called when kernel support is not enabled.\n" msgstr "Funkce metadat init_io zavolána, i když podpora jádra není zapnuta.\n" #: quotaio_meta.c:27 msgid "" "Metadata init_io called when kernel does not support generic quota " "interface!\n" msgstr "" "Funkce metadat init_io zavolána, když jádro nepodporuje obecné rozhraní\n" "pro kvóty!\n" #: quotaio_rpc.c:77 quotaio_v1.c:278 quotaio_v2.c:464 #, c-format msgid "Trying to write quota to readonly quotafile on %s\n" msgstr "Pokus zapsat kvótu do kvótového souboru, který jen pro čtení, na %s\n" #: quotaio_tree.c:71 #, c-format msgid "Cannot write block (%u): %s\n" msgstr "Nelze zapsat blok (%u): %s\n" #: quotaio_tree.c:94 msgid "Cannot allocate new quota block (out of disk space).\n" msgstr "Nelze alokovat nový kvótový blok (na disku došlo místo).\n" #: quotaio_tree.c:202 msgid "find_free_dqentry(): Data block full but it shouldn't.\n" msgstr "find_free_dqentry(): Datový blok je plný, ačkoliv by neměl být.\n" #: quotaio_tree.c:237 #, c-format msgid "Inserting already present quota entry (block %u).\n" msgstr "Vložení již přítomného záznamu kvóty (blok %u).\n" #: quotaio_tree.c:260 #, c-format msgid "Cannot write quota (id %u): %s\n" msgstr "Kvótu (ID %u) nelze zapsat: %s\n" #: quotaio_tree.c:279 #, c-format msgid "Quota write failed (id %u): %s\n" msgstr "Zápis kvóty (ID %u) selhal: %s\n" #: quotaio_tree.c:291 #, c-format msgid "Quota structure has offset to other block (%u) than it should (%u).\n" msgstr "Struktura kvóty má pozici na jiném bloku (%u), než by měla (%u).\n" #: quotaio_tree.c:367 #, c-format msgid "Quota for id %u referenced but not present.\n" msgstr "Kvóta pro ID %u je odkazována, ale není přítomna.\n" #: quotaio_tree.c:426 #, c-format msgid "Cannot read quota structure for id %u: %s\n" msgstr "Strukturu kvóty pro ID %u nelze přečíst: %s\n" #: quotaio_tree.c:468 #, c-format msgid "" "Illegal reference (%u >= %u) in %s quota file on %s. Quota file is probably " "corrupted.\n" "Please run quotacheck(8) and try again.\n" msgstr "" "Zakázaný odkaz (%u >= %u) v kvótovém souboru %s na %s.\n" "Kvótový soubor je pravděpodobně poškozen.\n" "Prosím, spusťte quotacheck(8) a zkuste to znovu.\n" #: quotaio_v1.c:184 #, c-format msgid "Trying to write info to readonly quotafile on %s.\n" msgstr "" "Pokus zapsat údaje do kvótového souboru, který je jen pro čtení, na %s.\n" #: quotaio_v2.c:255 msgid "" "Your quota file is stored in wrong endianity. Please use convertquota(8) to " "convert it.\n" msgstr "" "Váš soubor s kvótami je uložen v chybné endianitě. Prosím, převeďte jej\n" "pomocí convertquota(8).\n" # FIXME: duplicate of quotaio_v1.c:206 #: quotaio_v2.c:388 #, c-format msgid "Trying to write info to readonly quotafile on %s\n" msgstr "" "Pokus zapsat údaje do kvótového souboru, který je jen pro čtení, na %s.\n" #: quotaio_v2.c:518 #, c-format msgid "" "Statistics:\n" "Total blocks: %u\n" "Data blocks: %u\n" "Entries: %u\n" "Used average: %f\n" msgstr "" "Statistika:\n" "Celkem bloků: %u\n" "Datových bloků: %u\n" "Záznamů: %u\n" "Průměrně použito: %f\n" #: quotaio_xfs.c:53 msgid "Truncating kernel returned time stamp." msgstr "" #: quotaio_xfs.c:311 #, c-format msgid "*** Status for %s quotas on device %s\n" msgstr "*** Stav kvót %s na zařízení %s\n" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "ON" msgstr "ZAPNUTO" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "OFF" msgstr "VYPNUTO" #: quotaio_xfs.c:315 quotaio_xfs.c:319 quotaio_xfs.c:323 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "Účtování: %s; Vynucení: %s\n" #: quotaio_xfs.c:335 quotaio_xfs.c:339 quotaio_xfs.c:343 #, c-format msgid "Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n" msgstr "Účtování [ondisk]: %s; Vynucení [ondisk]: %s\n" #: quotaio_xfs.c:352 quotaio_xfs.c:361 quotaio_xfs.c:374 #, c-format msgid "Inode: none\n" msgstr "Iuzel: žádný\n" #: quotaio_xfs.c:354 quotaio_xfs.c:363 quotaio_xfs.c:376 #, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "Iuzel: č. %llu (%'llu bloků, %'u rozsahů)\n" #: quotaon.c:37 #, fuzzy, c-format msgid "" "Usage:\n" "\t%s [-guPvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guPvp] [-F quotaformat] [-x state] filesys ...\n" "\n" "-a, --all %s\n" "-f, --off turn quotas off\n" "-u, --user operate on user quotas\n" "-g, --group operate on group quotas\n" "-P, --project operate on project quotas\n" "-p, --print-state print whether quotas are on or off\n" "-x, --xfs-command=cmd perform XFS quota command\n" "-F, --format=formatname operate on specific quota format\n" "-v, --verbose print more messages\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" msgstr "" "Použití:\n" "\t%s [-guvp] [-F FORMÁT] [-x STAV] -a\n" "\t%s [-guvp] [-F FORMÁT] [-x STAV] SYSTÉM_SOUBORŮ…\n" "\n" "-a, --all %s\n" "-f, --off vypne kvóty\n" "-u, --user operuje nad kvótami uživatele\n" "-g, --group operuje na kvótami skupiny\n" "-p, --print-state vypíše, zda-li jsou kvóty zapnuty, nebo vypnuty\n" "-x, --xfs-command=PŘÍKAZ provede příkaz kvóty XFS\n" "-F, --format=FORMÁT operuje nad zadaným kvótovým formátem\n" "-v, --verbose vypisuje podrobná hlášení\n" "-h, --help zobrazí tuto nápovědu a skončí\n" "-V, --version zobrazí údaje o verzi a skončí\n" #: quotaon.c:51 msgid "turn quotas off for all filesystems" msgstr "vypne kvóty na všech souborových systémech" #: quotaon.c:52 msgid "turn quotas on for all filesystems" msgstr "zapne kvóty na všech souborových systémech" #: quotaon.c:117 msgid "Cannot turn on/off quotas via RPC.\n" msgstr "Kvóty nelze přes RPC zapnout/vypnout.\n" #: quotaon.c:164 #, c-format msgid "set root_squash on %s: %s\n" msgstr "nastavení root_squash na %s: %s\n" #: quotaon.c:168 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "%s: root_squash na %s vypnuto\n" #: quotaon.c:170 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "%s: root_squash na %s zapnuto\n" #: quotaon.c:188 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "quotactl na %s [%s]: %s\n" # TODO: quotas attribute #: quotaon.c:191 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "%s [%s]: kvóty pro %s vypnuty\n" #: quotaon.c:204 #, c-format msgid "cannot find %s on %s [%s]\n" msgstr "%s nelze na %s [%s] nalézt\n" #: quotaon.c:206 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "použití %s na %s [%s]: %s\n" #: quotaon.c:208 msgid "Maybe create new quota files with quotacheck(8)?\n" msgstr "Možná vytvořit nové kvótové soubory pomocí quotacheck(8)?\n" #: quotaon.c:210 msgid "Quota format not supported in kernel.\n" msgstr "Formát kvóty není podporován jádrem.\n" # TODO: quotas attribute #: quotaon.c:213 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "%s [%s]: kvóty %s zapnuty\n" #: quotaon.c:254 msgid "Cannot change state of GFS2 quota.\n" msgstr "Stav kvóty GFS2 nelze změnit.\n" #: quotaon.c:259 msgid "Cannot change state of XFS quota. It's not compiled in kernel.\n" msgstr "Stav kvóty XFS nelze změnit. Není zakompilováno do jádra.\n" #: quotaon.c:295 #, c-format msgid "Cannot find quota file on %s [%s] to turn quotas on/off.\n" msgstr "" "Pro vypnutí/zapnutí kvót je třeba kvótový soubor, který nelze na %s [%s] " "nalézt.\n" #: quotaon.c:300 #, c-format msgid "Quota file on %s [%s] does not exist or has wrong format.\n" msgstr "Kvótový soubor na %s [%s] neexistuje nebo má špatný formát.\n" # kvóta je, změní stav kvót na #: quotaon.c:330 quotaon.c:346 msgid "off" msgstr "vypnuto" #: quotaon.c:332 #, fuzzy msgid "on (accounting)" msgstr "a účtování" #: quotaon.c:334 msgid "on (enforced)" msgstr "" # kvóta je, změní stav kvót na #: quotaon.c:346 msgid "on" msgstr "zapnuto" # TODO: quota attribute #: quotaon.c:348 #, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "Kvóta %s na %s (%s) je %s\n" #: quotaon.c:365 #, c-format msgid "Name must be quotaon or quotaoff not %s\n" msgstr "Název musí být quotaon nebo quotaoff, ne %s\n" #: quotaon.c:371 #, c-format msgid "Required format %s not supported by kernel.\n" msgstr "Požadovaný formát %s není podporován jádrem.\n" #: quotaon.c:373 msgid "Warning: No quota format detected in the kernel.\n" msgstr "Pozor: Žádný formát kvóty nebyl v jádře rozpoznán.\n" #: quotaon.c:380 #, c-format msgid "%s: Quota cannot be turned on on NFS filesystem\n" msgstr "%s: Kvótu nelze souborovém systému NFS zapnout.\n" #: quotaon_xfs.c:36 #, c-format msgid "quotactl() on %s: %s\n" msgstr "quotactl() na %s: %s\n" # TODO: quota attribute #: quotaon_xfs.c:68 quotaon_xfs.c:88 #, c-format msgid "Enabling %s quota on root filesystem (reboot to take effect)\n" msgstr "" "Zapíná se kvóta pro %s na kořenovém souborovém systému (aby se nastavení " "projevilo, je třeba rebootovat)\n" # TODO: quota attribute #: quotaon_xfs.c:72 #, c-format msgid "Enable XFS %s quota accounting during mount\n" msgstr "Zapněte účtování kvót %s při připojení systému\n" # TODO: quota attribute #: quotaon_xfs.c:82 #, c-format msgid "Cannot delete %s quota on %s - switch quota accounting off first\n" msgstr "Nelze smazat kvótu %s na %s – nejprve vypněte účtování kvót\n" # TODO: quota attribute #: quotaon_xfs.c:95 #, c-format msgid "Enabling %s quota enforcement on %s\n" msgstr "Zapíná se vynucování kvót %s na %s\n" # TODO: quota attribute #: quotaon_xfs.c:98 #, c-format msgid "Already accounting %s quota on %s\n" msgstr "Kvóty %s na %s se již počítají\n" # TODO: quota attribute #: quotaon_xfs.c:105 #, c-format msgid "Disabling %s quota accounting on %s\n" msgstr "Vypíná se účtování kvót %s na %s\n" # TODO: internationalize first argument #: quotaon_xfs.c:109 #, c-format msgid "Quota enforcement already disabled for %s on %s\n" msgstr "Vynucování kvót %s na %s již vypnuto\n" # TODO: internationalize first argument #: quotaon_xfs.c:118 #, c-format msgid "" "Cannot delete %s quota on %s - switch quota enforcement and accounting off " "first\n" msgstr "" "Kvótu %s nelze na %s smazat – nejprve je třeba vypnout vynucování a účtování " "kvót\n" # TODO: internationalize first argument #: quotaon_xfs.c:123 #, c-format msgid "Enforcing %s quota already on %s\n" msgstr "Kvóta %s se na %s již vynucuje\n" # TODO: internationalize first argument #: quotaon_xfs.c:130 #, c-format msgid "Cannot switch off %s quota accounting on %s when enforcement is on\n" msgstr "Účtování kvóty %s na %s nelze vypnout, je-li vynucování zapnuto\n" #: quotaon_xfs.c:138 msgid "and accounting " msgstr "a účtování" #: quotaon_xfs.c:139 #, c-format msgid "Disabling %s quota enforcement %son %s\n" msgstr "Vypíná se vynucování %2$skvóty %1$s na %3$s\n" #: quotaon_xfs.c:145 #, c-format msgid "Unexpected XFS quota state sought on %s\n" msgstr "Hledán neočekávaný stav XFS kvóty na %s\n" #: quotaon_xfs.c:160 #, c-format msgid "quotactl on %s: %s\n" msgstr "quotactl na %s: %s\n" # TODO: internationalize second argument #: quotaon_xfs.c:164 #, c-format msgid "%s: %s quotas turned off\n" msgstr "%s: kvóty %s vypnuty\n" # TODO: internationalize second argument #: quotaon_xfs.c:166 #, c-format msgid "%s: %s quotas turned on\n" msgstr "%s: kvóty %s zapnuty\n" #: quotaon_xfs.c:180 #, c-format msgid "Failed to delete quota: %s\n" msgstr "Odstranění kvóty selhalo: %s\n" # TODO: internationalize second argument #: quotaon_xfs.c:185 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "%s: bloky kvóty %s smazány\n" #: quotaon_xfs.c:248 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "Neplatný argument „%s“\n" #: quotaops.c:82 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "%s (UID %d): Povolení zamítnuto\n" #: quotaops.c:94 #, c-format msgid "%s (gid %d): gid set allocation (%d): %s\n" msgstr "%s (GID %d): alokace množiny GID (%d): %s\n" #: quotaops.c:105 #, c-format msgid "%s (gid %d): error while trying getgroups(): %s\n" msgstr "%s (GID %d): volání getgroups() skončilo chybou: %s\n" #: quotaops.c:116 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "%s (GID %d): Povolení zamítnuto\n" #: quotaops.c:134 #, fuzzy msgid "Cannot connect to RPC quota service" msgstr "Na netlinkový socket se nelze připojit: %s\n" #: quotaops.c:136 msgid "Quota not enabled" msgstr "" #: quotaops.c:141 #, c-format msgid "error while getting quota from %s for %s (id %u): %s\n" msgstr "chyba při zjišťování kvóty z %s pro %s (ID %u): %s\n" #: quotaops.c:169 #, c-format msgid "Cannot write quota for %u on %s: %s\n" msgstr "Kvótu pro %u nelze na %s zapsat: %s\n" # TODO: quota attribute #: quotaops.c:204 quotaops.c:206 #, fuzzy, c-format msgid "%s failed: %s\n" msgstr "synchronizace kvóty %s selhala: %s\n" #: quotaops.c:220 msgid "Too many parameters to editor.\n" msgstr "Příliš mnoho parametrů editoru.\n" #: quotaops.c:228 #, c-format msgid "Cannot exec %s\n" msgstr "%s nelze spustit\n" #: quotaops.c:245 #, fuzzy, c-format msgid "Cannot truncate a file: %s\n" msgstr "O souboru s kvótami %s nelze zjistit údaje: %s\n" #: quotaops.c:247 #, fuzzy, c-format msgid "Cannot reset a file offset: %s\n" msgstr "Nelze načíst soubor se statistikou %s: %s\n" #: quotaops.c:249 #, fuzzy, c-format msgid "Cannot duplicate a file descriptor: %s\n" msgstr "Deskriptor nelze zdvojit: %s\n" #: quotaops.c:251 #, fuzzy, c-format msgid "Cannot open a stream to write to: %s\n" msgstr "Dočasný soubor nelze znovu otevřít: %s\n" #: quotaops.c:252 #, fuzzy, c-format msgid "Cannot open a stream to read from: %s\n" msgstr "Dočasný soubor nelze znovu otevřít: %s\n" # TODO: internationalize first argument #: quotaops.c:268 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "Diskové kvóty pro %s %s (%cid %d):\n" #: quotaops.c:272 #, c-format msgid "" " Filesystem blocks soft hard inodes " "soft hard\n" msgstr "" " Souborový systém bloků měkký pevný iuzlů " "měkký pevný\n" #: quotaops.c:305 #, c-format msgid "WARNING - %s: cannot change current block allocation\n" msgstr "POZOR – %s: množství alokovaných bloků nelze změnit\n" #: quotaops.c:308 #, c-format msgid "WARNING - %s: cannot change current inode allocation\n" msgstr "POZOR – %s: množství alokovaných iuzlů nelze změnit\n" #: quotaops.c:334 msgid "Bad format: two title lines assumed\n" msgstr "" #: quotaops.c:345 #, c-format msgid "" "Bad format:\n" "%s\n" msgstr "" "Chybný formát:\n" "%s\n" # FIXME: First argument is continuation of sentence. This is not localizable # correctly. #: quotaops.c:351 #, fuzzy, c-format msgid "Bad block usage: %s: %s\n" msgstr "Špatná hodtnota: %s: %s\n" #: quotaops.c:358 #, fuzzy, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "Chybný měkký limit bloků" #: quotaops.c:365 #, fuzzy, c-format msgid "Bad block hard limit: %s: %s\n" msgstr "Chybný pevný limit bloků" # FIXME: First argument is continuation of sentence. This is not localizable # correctly. #: quotaops.c:372 #, fuzzy, c-format msgid "Bad inode usage: %s: %s\n" msgstr "Špatná hodtnota: %s: %s\n" #: quotaops.c:379 #, fuzzy, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "Chybný měkký limit iuzlů" #: quotaops.c:386 #, fuzzy, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "Chybný pevný limit iuzlů" # TODO: internationalize first argument #: quotaops.c:439 #, c-format msgid "Times to enforce softlimit for %s %s (%cid %d):\n" msgstr "Časy vynucení měkkého limitu pro %s %s (%cid %d):\n" # XXX: Keep this message on one line because parser expects exact line numbers #: quotaops.c:441 quotaops.c:544 #, c-format msgid "Time units may be: days, hours, minutes, or seconds\n" msgstr "" "Jednotky času smí být: days (dny), hours (hodiny), minutes (minuty) nebo " "seconds (sekundy)\n" #: quotaops.c:443 #, c-format msgid "" " Filesystem block grace inode grace\n" msgstr "" " Souborový systém odklad pro bloky odklad pro " "iuzly\n" #: quotaops.c:448 quotaops.c:454 quotaops.c:499 quotaops.c:512 setquota.c:288 #: setquota.c:294 msgid "unset" msgstr "nenastaveno" #: quotaops.c:450 quotaops.c:456 msgid "0seconds" msgstr "0sekund" # TODO: Pluralize #: quotaops.c:452 quotaops.c:458 quotasys.c:504 #, c-format msgid "%useconds" msgstr "%usekund" #: quotaops.c:485 quotaops.c:584 msgid "Bad format: three title lines assumed\n" msgstr "" #: quotaops.c:495 quotaops.c:592 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" "chybný formát:\n" "%s\n" #: quotaops.c:506 quotaops.c:598 msgid "Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n" msgstr "" "Chybné jednotky času. Jednotky jsou „second“, „minute“, „hour“ a „day“.\n" # TODO: Internationalize argumentargumentargumentargumentargument #: quotaops.c:542 #, c-format msgid "Grace period before enforcing soft limits for %ss:\n" msgstr "Perioda odkladu před vynucením měkkého limitu pro %s:\n" #: quotaops.c:545 #, c-format msgid " Filesystem Block grace period Inode grace period\n" msgstr "" " Souborový systém Perioda odkladu bloků Perioda odkladu iuzlů\n" #: quotastats.c:48 #, c-format msgid "Cannot read stat file %s: %s\n" msgstr "Nelze načíst soubor se statistikou %s: %s\n" #: quotastats.c:83 #, c-format msgid "Error while getting quota statistics from kernel: %s\n" msgstr "Chyba při získávání statistiky kvót z jádra: %s\n" #: quotastats.c:87 #, c-format msgid "Error while getting old quota statistics from kernel: %s\n" msgstr "Chyba při získávání staré statistiky kvót z jádra: %s\n" #: quotastats.c:101 #, c-format msgid "Kernel quota version: old\n" msgstr "Verze jaderného subsystému kvót: stará\n" #: quotastats.c:103 #, c-format msgid "Kernel quota version: %u.%u.%u\n" msgstr "Verze jaderného subsystému kvót: %u.%u.%u\n" #: quotastats.c:104 #, c-format msgid "Number of dquot lookups: %ld\n" msgstr "Počet dotazů na dquota: %ld\n" #: quotastats.c:105 #, c-format msgid "Number of dquot drops: %ld\n" msgstr "Počet zahození dquot: %ld\n" #: quotastats.c:106 #, c-format msgid "Number of dquot reads: %ld\n" msgstr "Počet čtení dquot: %ld\n" #: quotastats.c:107 #, c-format msgid "Number of dquot writes: %ld\n" msgstr "Počet zápisů dquot: %ld\n" #: quotastats.c:108 #, c-format msgid "Number of quotafile syncs: %ld\n" msgstr "Počet synchronizací souboru s kvótami: %ld\n" #: quotastats.c:109 #, c-format msgid "Number of dquot cache hits: %ld\n" msgstr "Počet úspěšných dotazů na dquot v keši: %ld\n" #: quotastats.c:110 #, c-format msgid "Number of allocated dquots: %ld\n" msgstr "Počet alokovaných dquot: %ld\n" #: quotastats.c:111 #, c-format msgid "Number of free dquots: %ld\n" msgstr "Počet volných dquot: %ld\n" #: quotastats.c:112 #, c-format msgid "Number of in use dquot entries (user/group): %ld\n" msgstr "Počet použitých záznamů dquot (uživatel/skupina): %ld\n" #: setquota.c:59 #, fuzzy, c-format msgid "" "Usage:\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <user|group|project>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <-p protouser|protogroup|" "protoproject> <user|group|project> -a|<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] -b [-c] -a|<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] -t <blockgrace> <inodegrace> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] <user|group|project> -T <blockgrace> " "<inodegrace> -a|<filesystem>...\n" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\n" "-P, --project set limits for project\n" "-a, --all set limits for all filesystems\n" " --always-resolve always try to resolve name, even if is\n" " composed only of digits\n" "-F, --format=formatname operate on specific quota format\n" "-p, --prototype=protoname copy limits from user/group/project\n" "-b, --batch read limits from standard input\n" "-c, --continue-batch continue in input processing in case of an error\n" msgstr "" "Použití:\n" " setquota [-u|-g] %1$s[-F FORMÁT_KVÓTY] UŽIVATEL|SKUPINA\n" "\tMĚKKÝ_LIMIT_BLOKŮ PEVNÝ_LIMIT_BLOKŮ MĚKKÝ_LIMIT_IUZLŮ PEVNÝ_LIMIT_IUZLŮ\n" "\t-a|SYSTÉM_SOUBORŮ…\n" " setquota [-u|-g] %1$s[-F FORMÁT_KVÓTY] -p VZOROVÝ_UŽIVATEL|" "VZOROVÁ_SKUPINA\n" "\tUŽIVATEL|SKUPINA -a|SYSTÉM_SOUBORŮ…\n" " setquota [-u|-g] %1$s[-F FORMÁT_KVÓTY] -b [-c] -a|SYSTÉM_SOUBORŮ…\n" " setquota [-u|-g] [-F FORMÁT_KVÓTY] -t PERIODA_BLOKŮ PERIODA_IUZLŮ\n" "\t-a|SYSTÉM_SOUBORŮ…\n" " setquota [-u|-g] [-F FORMÁT_KVÓTY] UŽIVATEL|SKUPINA -T DOBA_BLOKŮ\n" "\tDOBA_IUZLŮ -a|SYSTÉM_SOUBORŮ…\n" "\n" "-u, --user nastaví limity pro uživatele\n" "-g, --group nastaví limity pro skupinu\n" "-a, --all nastaví limity pro všechny souborové systémy\n" " --always-resolve vždy překládá jména, i když se skládají jen " "z číslic\n" "-F, --format=FORMÁT_KVÓTY pracuje nad určitým formátem kvót\n" "-p, --prototype=VZOR zkopíruje limity z uživatele/skupiny\n" "-b, --batch limity načte v dávce ze standardního vstupu\n" "-c, --continue-batch pokračuje ve zpracování vstupu i v případě chyby\n" #: setquota.c:77 msgid "" "-r, --remote set remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" "-r, --remote nastaví vzdálenou kvótu (přes RPC)\n" "-m, --no-mixed-pathnames odstraní úvodní lomítka z systému NFSv4\n" #: setquota.c:80 #, fuzzy msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group/project\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "-t, --edit-period změní periodu odkladu\n" "-T, --edit-times změní dobu odkladu pro uživatele/skupinu\n" "-h, --help zobrazí tuto nápovědu a skončí\n" "-V, --version zobrazí údaje o verzi a skončí\n" "\n" #: setquota.c:84 edquota.c:73 quota.c:94 #, c-format msgid "Bugs to: %s\n" msgstr "" "Chyby v programu zasílejte (anglicky) na: %s\n" "Chyby v překladu (česky) na: <translation-team-cs@lists.sourceforge.net>\n" #: setquota.c:95 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" #: setquota.c:108 setquota.c:121 #, fuzzy, c-format msgid "%s: %s: %s\n" msgstr "%s: %s\n" #: setquota.c:229 #, fuzzy msgid "Group/user/project quotas cannot be used together.\n" msgstr "Kvóty skupiny a uživatele nelze použít společně.\n" #: setquota.c:233 msgid "Prototype user has no sense when editing grace times.\n" msgstr "Vzorový uživatel nemá smysl, když se mění doba odkladu.\n" #: setquota.c:237 msgid "Cannot set both individual and global grace time.\n" msgstr "Jednotlivé a globální doby odkladu nelze nastavit najednou.\n" #: setquota.c:241 msgid "Batch mode cannot be used for setting grace times.\n" msgstr "Dobu odkladu nelze v dávkovém režimu nastavit.\n" #: setquota.c:245 msgid "Batch mode and prototype user cannot be used together.\n" msgstr "Dávkový režim a vzorového uživatele nelze nastavit najednou.\n" #: setquota.c:249 msgid "Cannot set grace times over RPC protocol.\n" msgstr "Doby odkladu nelze nastavit přes protokol RPC.\n" #: setquota.c:272 msgid "Bad block softlimit" msgstr "Chybný měkký limit bloků" #: setquota.c:273 msgid "Bad block hardlimit" msgstr "Chybný pevný limit bloků" #: setquota.c:274 msgid "Bad inode softlimit" msgstr "Chybný měkký limit iuzlů" #: setquota.c:275 msgid "Bad inode hardlimit" msgstr "Chybný pevný limit iuzlů" #: setquota.c:281 setquota.c:293 msgid "Bad block grace time" msgstr "Chybná doba odkladu bloků" #: setquota.c:282 setquota.c:299 msgid "Bad inode grace time" msgstr "Chybná doba odkladu iuzlů" #: setquota.c:305 msgid "Mountpoint not specified.\n" msgstr "Nebyl zadán bod připojení.\n" #: setquota.c:319 setquota.c:450 setquota.c:493 #, fuzzy msgid "Error getting quota information to update.\n" msgstr "Údaj o kvótě uživatele %s nelze získat.\n" #: setquota.c:325 msgid "Error getting prototype quota information.\n" msgstr "" #: setquota.c:372 #, c-format msgid "Line %d too long.\n" msgstr "Řádek %d je příliš dlouhý.\n" #: setquota.c:384 #, c-format msgid "Cannot parse input line %d.\n" msgstr "Vstupní řádek %d nelze rozebrat.\n" #: setquota.c:386 setquota.c:394 setquota.c:403 setquota.c:412 setquota.c:421 #: setquota.c:430 msgid "Exitting.\n" msgstr "Končí se.\n" #: setquota.c:387 setquota.c:395 setquota.c:404 setquota.c:413 setquota.c:422 #: setquota.c:431 msgid "Skipping line.\n" msgstr "Řádek bude přeskočen.\n" #: setquota.c:392 #, c-format msgid "Unable to resolve name '%s' on line %d.\n" msgstr "Jméno „%s“ na řádku %d nelze přeložit.\n" #: setquota.c:400 #, fuzzy, c-format msgid "Unable to parse block soft limit '%s' on line %d: %s\n" msgstr "Jméno „%s“ na řádku %d nelze přeložit.\n" #: setquota.c:409 #, fuzzy, c-format msgid "Unable to parse block hard limit '%s' on line %d: %s\n" msgstr "Jméno „%s“ na řádku %d nelze přeložit.\n" #: setquota.c:418 #, fuzzy, c-format msgid "Unable to parse inode soft limit '%s' on line %d: %s\n" msgstr "Jméno „%s“ na řádku %d nelze přeložit.\n" #: setquota.c:427 #, fuzzy, c-format msgid "Unable to parse inode hard limit '%s' on line %d: %s\n" msgstr "Jméno „%s“ na řádku %d nelze přeložit.\n" #: setquota.c:474 #, c-format msgid "Setting grace period on %s is not supported.\n" msgstr "Nastavování periody odkladu na %s není podporováno.\n" #: setquota.c:500 #, c-format msgid "Not setting block grace time on %s because softlimit is not exceeded.\n" msgstr "" "Doba odkladu bloků na %s nebude nastavena, protože měkký limit není " "překročen.\n" #: setquota.c:504 #, c-format msgid "Not setting inode grace time on %s because softlimit is not exceeded.\n" msgstr "" "Doba odkladu iuzlů na %s nebude nastavena, protože měkký limit není " "překročen.\n" # TODO: Internationalize first argument #: setquota.c:515 #, c-format msgid "" "cannot write times for %s. Maybe kernel does not support such operation?\n" msgstr "Doby pro %s nelze zapsat. Možná jádro takovou operaci nepodporuje.\n" #: quotasys.c:190 #, c-format msgid "user %s does not exist.\n" msgstr "uživatel %s neexistuje.\n" #: quotasys.c:219 #, c-format msgid "group %s does not exist.\n" msgstr "skupina %s neexistuje.\n" #: quotasys.c:249 #, fuzzy, c-format msgid "project %s does not exist.\n" msgstr "skupina %s neexistuje.\n" #: quotasys.c:371 #, c-format msgid "" "Unknown quota format: %s\n" "Supported formats are:\n" " vfsold - original quota format\n" " vfsv0 - standard quota format\n" " vfsv1 - quota format with 64-bit limits\n" " rpc - use RPC calls\n" " xfs - XFS quota format\n" msgstr "" "Neznámý formát kvót: %s\n" "Podporované formáty jsou:\n" " vfsold – původní formát kvót\n" " vfsv0 – standardní formát kvót\n" " vfsv1 – formát kvót s 64bitovými limity\n" " rpc – použijí se volání RPC\n" " xfs – formát kvót XFS\n" #: quotasys.c:398 #, c-format msgid "" "Unknown output format: %s\n" "Supported formats are:\n" " default - default\n" " csv - comma-separated values\n" " xml - simple XML\n" msgstr "" # FIXME: context # None limit # None grace #: quotasys.c:460 quota.c:282 msgid "none" msgstr "žádný" # TODO: Pluralize #: quotasys.c:492 #, c-format msgid "%ddays" msgstr "%ddnů" #: quotasys.c:494 #, c-format msgid "%02d:%02d" msgstr "%02d:%02d" # TODO: Pluralize #: quotasys.c:506 #, c-format msgid "%uminutes" msgstr "%uminut" # TODO: Pluralize #: quotasys.c:508 #, c-format msgid "%uhours" msgstr "%uhodin" # TODO: Pluralize #: quotasys.c:510 #, c-format msgid "%udays" msgstr "%udnů" # TODO: Pluralize #: quotasys.c:519 msgid "second" msgstr "sekunda" # TODO: Pluralize #: quotasys.c:519 msgid "seconds" msgstr "sekund" # TODO: Pluralize #: quotasys.c:521 msgid "minute" msgstr "minuta" # TODO: Pluralize #: quotasys.c:521 msgid "minutes" msgstr "minut" # TODO: Pluralize #: quotasys.c:523 msgid "hour" msgstr "hodina" # TODO: Pluralize #: quotasys.c:523 msgid "hours" msgstr "hodin" # TODO: Pluralize #: quotasys.c:525 msgid "day" msgstr "den" # TODO: Pluralize #: quotasys.c:525 msgid "days" msgstr "dnů" #: quotasys.c:583 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:585 msgid "K" msgstr "" #: quotasys.c:587 msgid "M" msgstr "" #: quotasys.c:589 msgid "G" msgstr "" #: quotasys.c:591 msgid "T" msgstr "" #: quotasys.c:594 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:598 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:651 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:655 msgid "k" msgstr "" #: quotasys.c:657 msgid "m" msgstr "" #: quotasys.c:659 msgid "g" msgstr "" #: quotasys.c:661 msgid "t" msgstr "" #: quotasys.c:664 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:668 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:827 #, c-format msgid "Cannot stat quota file %s: %s\n" msgstr "O souboru s kvótami %s nelze zjistit údaje: %s\n" #: quotasys.c:975 msgid "Not all specified mountpoints are using quota.\n" msgstr "Ne všechny použité přípojné body používají kvótu.\n" #: quotasys.c:989 #, c-format msgid "Error while releasing file on %s\n" msgstr "Chyba při uvolňování souboru na %s\n" #: quotasys.c:1048 #, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "Nelze vytvořit množinu pro sigaction(): %s\n" #: quotasys.c:1051 #, c-format msgid "Cannot set signal handler: %s\n" msgstr "Nelze nastavit obsluhu signálu: %s\n" #: quotasys.c:1107 #, c-format msgid "Cannot reset signal handler: %s\n" msgstr "Nelze znovu nastavit obsluhu signálu: %s\n" #: quotasys.c:1262 msgid "Cannot open any file with mount points.\n" msgstr "Žádný soubor s body připojení nelze otevřít.\n" #: quotasys.c:1280 #, c-format msgid "Cannot get device name for %s\n" msgstr "Nelze získat název zařízení pro %s\n" #: quotasys.c:1340 #, c-format msgid "Cannot resolve mountpoint path %s: %s\n" msgstr "Nelze přeložit cestu k bodu připojení %s: %s\n" #: quotasys.c:1346 #, c-format msgid "Cannot statfs() %s: %s\n" msgstr "Nelze vykonat statfs() nad %s: %s\n" #: quotasys.c:1358 #, c-format msgid "Cannot stat() mounted device %s: %s\n" msgstr "Nelze získat údaje o připojeném zařízení %s: %s\n" #: quotasys.c:1363 #, c-format msgid "" "Device (%s) filesystem is mounted on unsupported device type. Skipping.\n" msgstr "" "Souborový systém ze zařízení (%s) je připojen na nepodporovaném druhu\n" "zařízení. Přeskakuje se.\n" #: quotasys.c:1373 #, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "Nad bodem připojení %s nelze zavolat stat(): %s\n" #: quotasys.c:1442 #, c-format msgid "" "Cannot find a device with %s.\n" "Skipping...\n" msgstr "" "Zařízení s %s nelze nalézt.\n" "Přeskakuje se…\n" #: quotasys.c:1446 #, c-format msgid "" "Cannot stat() a mountpoint with %s: %s\n" "Skipping...\n" msgstr "" "Nad bodem připojení s %s nelze zavolat stat(): %s\n" "Přeskakuje se…\n" #: quotasys.c:1454 #, c-format msgid "" "Cannot stat() given mountpoint %s: %s\n" "Skipping...\n" msgstr "" "Nad zadaným bodem připojení %s nelze zavolat stat(): %s\n" "Přeskakuje se…\n" #: quotasys.c:1464 #, c-format msgid "Cannot find a filesystem mountpoint for directory %s\n" msgstr "K adresáři %s nelze přiřadit bod připojení souborového systému.\n" #: quotasys.c:1470 #, c-format msgid "Cannot resolve path %s: %s\n" msgstr "Cestu %s nelze přeložit: %s\n" #: quotasys.c:1481 #, c-format msgid "Cannot find mountpoint for device %s\n" msgstr "K zařízení %s nelze přiřadit bod připojení.\n" #: quotasys.c:1487 #, c-format msgid "Specified path %s is not directory nor device.\n" msgstr "Zadaná cesta %s není ani adresářem ani zařízením.\n" #: quotasys.c:1495 msgid "No correct mountpoint specified.\n" msgstr "Nezadán žádný správný bod připojení.\n" #: quotasys.c:1550 #, c-format msgid "Mountpoint (or device) %s not found or has no quota enabled.\n" msgstr "Bod připojení (nebo zařízení) %s nenalezen nebo nemá zapnuté kvóty.\n" #: rquota_svc.c:86 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -s --no-setquota disables remote calls to setquota (default)\n" " -S --setquota enables remote calls to setquota\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" "Použití: %s [PŘEPÍNAČE]\n" "Přepínače jsou:\n" " -h --help zobrazí tento text\n" " -V --version zobrazí údaje o verzi\n" " -F --foreground spustí službu kvót na popředí\n" " -I --autofs přípojné body připojené pomocí automounteru nebudou\n" " ignorovány\n" " -p --port PORT poslouchá na zadaném portu\n" " -s --no-setquota zakáže vzdálené nastavování kvót (výchozí)\n" " -S --setquota povolí vzdálené nastavování kvót\n" " -x --xtab CESTA určuje náhradní soubor s tabulkou exportů NFS\n" #: rquota_svc.c:97 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" "Použití: %s [PŘEPÍNAČE]\n" "Přepínače jsou:\n" " -h --help zobrazí tento text\n" " -V --version zobrazí údaje o verzi\n" " -F --foreground spustí službu kvót na popředí\n" " -I --autofs přípojné body připojené pomocí automounteru nebudou\n" " ignorovány\n" " -p --port PORT poslouchá na zadaném portu\n" " -x --xtab CESTA určuje náhradní soubor s tabulkou exportů NFS\n" #: rquota_svc.c:144 #, c-format msgid "Illegal port number: %s\n" msgstr "Zakázané číslo portu: %s\n" #: rquota_svc.c:151 #, c-format msgid "Cannot access the specified xtab file %s: %s\n" msgstr "K zadanému souboru xtab %s nelze přistoupit: %s\n" #: rquota_svc.c:189 #, c-format msgid "unknown address family %u for RPC request\n" msgstr "" #: rquota_svc.c:195 #, c-format msgid "failed to translate address for RPC request: %s\n" msgstr "" #: rquota_svc.c:204 #, c-format msgid "host %s attempted to call setquota when disabled\n" msgstr "" "Stroj %s se pokusil zavolat setquota, ačkoliv nastavování je zakázáno\n" #: rquota_svc.c:211 #, c-format msgid "host %s attempted to call setquota from port >= 1024\n" msgstr "Stroj %s se pokusil zavolat setquota z portu >= 1024\n" #: rquota_svc.c:226 #, c-format msgid "Denied access to host %s\n" msgstr "Přístup ke stroji %s zamítnut\n" #: rquota_svc.c:314 rquota_svc.c:400 msgid "unable to free arguments\n" msgstr "Argumenty nelze uvolnit\n" #: rquota_svc.c:423 #, c-format msgid "" "Warning: Cannot open export table %s: %s\n" "Using '/' as a pseudofilesystem root.\n" msgstr "" "Pozor: Tabulku exportů %s nelze otevřít: %s\n" "Jako kořen pseudosystému souborů se použije „/“.\n" #: rquota_svc.c:474 #, fuzzy, c-format msgid "Failed to access local netconfig database: %s\n" msgstr "Odstranění kvóty selhalo: %s\n" #: rquota_svc.c:483 #, fuzzy, c-format msgid "Failed to create %s service.\n" msgstr "UDP službu nelze vytvořit.\n" #: rquota_svc.c:488 #, fuzzy, c-format msgid "Unable to register (RQUOTAPROG, RQUOTAVERS, %s).\n" msgstr "nelze zaregistrovat (RQUOTAPROG, RQUOTAVERS, UDP.)\n" #: rquota_svc.c:494 #, fuzzy, c-format msgid "Unable to register (RQUOTAPROG, EXT_RQUOTAVERS, %s).\n" msgstr "nelze zaregistrovat (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n" #: rquota_svc.c:542 msgid "svc_run returned\n" msgstr "Funkce svc_run() se vrátila.\n" # TODO: Upper-case UID #: set_limits_example.c:20 #, c-format msgid "copy_user_quota_limits: Failed to set userquota for uid %ld : %s\n" msgstr "" "copy_user_quota_limits: Nastavení kvót uživateli s UID %ld selhalo: %s\n" # TODO: Upper-case UID #: set_limits_example.c:27 #, c-format msgid "copy_user_quota_limits: Failed to get userquota for uid %ld : %s\n" msgstr "copy_user_quota_limits: Získání kvót uživatele s UID %ld selhalo: %s\n" # FIXME: GID? #: set_limits_example.c:43 #, c-format msgid "copy_group_quota_limits: Failed to set groupquota for gid %ld : %s\n" msgstr "copy_group_quota_limits: Nastavení kvót skupině s ID %ld selhalo: %s\n" # FIXME: GID? #: set_limits_example.c:50 #, c-format msgid "copy_group_quota_limits: Failed to get groupquota for gid %ld : %s\n" msgstr "copy_group_quota_limits: Získání kvót skupiny s ID %ld selhalo: %s\n" #: svc_socket.c:75 #, c-format msgid "Unrecognized bind address family: %s\n" msgstr "" #: svc_socket.c:85 #, c-format msgid "Unrecognized bind address protocol: %s\n" msgstr "" #: svc_socket.c:95 #, c-format msgid "Unrecognized address semantics: %lu\n" msgstr "" #: svc_socket.c:103 #, fuzzy, c-format msgid "Failed to construct bind address: %s\n" msgstr "Na zadanou adresu se nelze přilepit: %s\n" #: svc_socket.c:117 #, fuzzy, c-format msgid "Error creating socket: %s\n" msgstr "Socket nelze vytvořit: %s\n" #: svc_socket.c:124 #, fuzzy, c-format msgid "Cannot set IPv6 socket options: %s\n" msgstr "Socketu nelze nastavit parametry: %s\n" #: svc_socket.c:131 #, c-format msgid "Cannot set socket options: %s\n" msgstr "Socketu nelze nastavit parametry: %s\n" #: svc_socket.c:137 #, fuzzy, c-format msgid "Cannot bind to address: %s\n" msgstr "Na zadanou adresu se nelze přilepit: %s\n" #: svc_socket.c:144 #, fuzzy, c-format msgid "Cannot listen to address: %s\n" msgstr "Na zadanou adresu se nelze přilepit: %s\n" #: xqmstats.c:32 xqmstats.c:37 msgid "The running kernel does not support XFS\n" msgstr "Bežící jádro nepodporuje XFS\n" #: xqmstats.c:50 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "Statistika quot Správce kvót XFS\n" #: xqmstats.c:51 #, c-format msgid " reclaims: %u\n" msgstr " uvolnění: %u\n" #: xqmstats.c:52 #, c-format msgid " missed reclaims: %u\n" msgstr " nenalezená uvolnění: %u\n" #: xqmstats.c:53 #, c-format msgid " dquot dups: %u\n" msgstr " duplikací dquot: %u\n" #: xqmstats.c:54 #, c-format msgid " cache misses: %u\n" msgstr " nenalezení v keši: %u\n" #: xqmstats.c:55 #, c-format msgid " cache hits: %u\n" msgstr " zásahů v keši: %u\n" #: xqmstats.c:56 #, c-format msgid " dquot wants: %u\n" msgstr " požadavků na dquot: %u\n" #: xqmstats.c:57 #, c-format msgid " shake reclaims: %u\n" msgstr " uvolnění setřesením: %u\n" #: xqmstats.c:58 #, c-format msgid " inact reclaims: %u\n" msgstr " uvolnění neaktivních: %u\n" #: xqmstats.c:63 #, c-format msgid "Maximum %u dquots (currently %u incore, %u on freelist)\n" msgstr "Maximum %u dquot (nyní %u v jádře, %u na seznamu volných)\n" #: edquota.c:50 #, fuzzy, c-format msgid "" "Usage:\n" "\tedquota %1$s[-u] [-F formatname] [-p username] [-f filesystem] " "username ...\n" "\tedquota %1$s-g [-F formatname] [-p groupname] [-f filesystem] " "groupname ...\n" "\tedquota %1$s-P [-F formatname] [-p projectname] [-f filesystem] " "projectname ...\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -T username|groupname|" "projectname ...\n" msgstr "" "Použití:\n" "\tedquota %1$s[-u] [-F FORMÁT] [-p UŽIVATEL] [-f SOUBOROVÝ_SYSTÉM] " "UŽIVATEL…\n" "\tedquota %1$s-g [-F FORMÁT] [-p SKUPINA] [-f SOUBOROVÝ_SYSTÉM] SKUPINA…\n" "\tedquota [-u|g] [-F FORMÁT] [-f SOUBOROVÝ_SYSTÉM] -t\n" "\tedquota [-u|g] [-F FORMÁT] [-f SOUBOROVÝ_SYSTÉM] -T UŽIVATEL|SKUPINA…\n" #: edquota.c:55 #, fuzzy msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" "-P, --project edit project data\n" msgstr "" "\n" "-u, --user upraví údaje o uživateli\n" "-g, --group upraví údaje o skupině\n" #: edquota.c:61 msgid "" "-r, --remote edit remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" "-r, --remote upraví vzdálenou kvótu (přes RPC)\n" "-m, --no-mixed-pathnames odstraní z připojovacích míst NFSv4 počáteční\n" " lomítka\n" #: edquota.c:64 msgid "" "-F, --format=formatname edit quotas of a specific format\n" "-p, --prototype=name copy data from a prototype user/group\n" " --always-resolve always try to resolve name, even if it is\n" " composed only of digits\n" "-f, --filesystem=filesystem edit data only on a specific filesystem\n" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace time of a user/group\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "-F, --format=FORMÁT upraví kvóty v zadaném formátu\n" "-p, --prototype=JMÉNO zkopíruje údaje z uživatele/skupiny coby " "vzoru\n" " --always-resolve vždy zkusí přeložit jméno, i když je tvořeno\n" " jen číslicemi\n" "-f, --filesystem=SOUBOROVÝ_SYSTÉM\n" " upraví údaje jen na zadaném " "SOUBOROVÉM_SYSTÉMU\n" "-t, --edit-period upraví periodu odkladu\n" "-T, --edit-times upraví dobu odkladu pro uživatele/skupinu\n" "-h, --help zobrazí tuto nápovědu a skončí\n" "-V, --version zobrazí údaje o verzi a skončí\n" "\n" #: edquota.c:159 msgid "" "Prototype name does not make sense when editing grace period or times.\n" msgstr "Při úpravě periody nebo doby odkladu nedává jméno vzoru smysl.\n" #: edquota.c:163 msgid "Cannot change grace times over RPC protocol.\n" msgstr "Doby odkladu nelze měnit přes protokol RPC.\n" #: edquota.c:181 #, c-format msgid "Cannot get quota information for user %s\n" msgstr "Údaj o kvótě uživatele %s nelze získat\n" #: edquota.c:187 msgid "fsname mismatch\n" msgstr "fsname (název souborového systému) se neshoduje\n" #: edquota.c:231 msgid "No filesystems with quota detected.\n" msgstr "Nenalezeny žádné souborové systémy s kvótou.\n" #: edquota.c:247 #, c-format msgid "Cannot create temporary file: %s\n" msgstr "Nelze vytvořit dočasný soubor: %s\n" #: edquota.c:252 #, c-format msgid "Cannot change owner of temporary file: %s\n" msgstr "Nelze změnit vlastníka dočasného souboru: %s\n" #: edquota.c:259 msgid "Cannot write grace times to file.\n" msgstr "Do souboru nelze zapsat doby odkladu.\n" #: edquota.c:264 edquota.c:283 edquota.c:316 edquota.c:335 #, fuzzy msgid "Cannot stat file with times.\n" msgstr "Žádný soubor s body připojení nelze otevřít.\n" #: edquota.c:270 msgid "Error while editing grace times.\n" msgstr "Chyba při úpravě dob odkladu.\n" #: edquota.c:281 edquota.c:333 #, fuzzy msgid "Cannot reopen!\n" msgstr "Nelze znovu otevřít!" #: edquota.c:291 msgid "Failed to parse grace times file.\n" msgstr "Rozbor souboru s dobami odkladu se nezdařil.\n" #: edquota.c:301 #, c-format msgid "Cannot get quota information for user %s.\n" msgstr "Údaj o kvótě uživatele %s nelze získat.\n" #: edquota.c:304 msgid "Cannot write individual grace times to file.\n" msgstr "Do souboru nelze zapsat jednotlivé doby odkladu.\n" #: edquota.c:310 msgid "Cannot write quotas to file.\n" msgstr "Kvóty nelze do souboru zapsat.\n" #: edquota.c:322 msgid "Error while editing quotas.\n" msgstr "Chyba při úpravě kvót.\n" #: edquota.c:344 msgid "Cannot read individual grace times from file.\n" msgstr "Ze souboru nelze načíst jednotlivé doby odkladu.\n" #: edquota.c:350 msgid "Cannot read quotas from file.\n" msgstr "Kvóty nelze ze souboru.\n" #: quota.c:58 #, fuzzy msgid "Usage: quota [-guPqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "Použití: quota [-guqvswim] [-l | [-Q | -A]] [-f FORMÁT]\n" #: quota.c:59 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ...\n" msgstr "\tquota [-qvswim] [-l | [-Q | -A]] [-F FORMÁT] -u UŽIVATEL…\n" #: quota.c:60 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ...\n" msgstr "\tquota [-qvswim] [-l | [-Q | -A]] [-F FORMÁT] -g SKUPINA…\n" #: quota.c:61 #, fuzzy msgid "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -P projectname ...\n" msgstr "\tquota [-qvswim] [-l | [-Q | -A]] [-F FORMÁT] -g SKUPINA…\n" #: quota.c:62 #, fuzzy msgid "\tquota [-qvswugPQm] [-F quotaformat] -f filesystem ...\n" msgstr "\tquota [-qvswugQm] [-F FORMÁT] -f SOUBOROVÝ_SYSTÉM…\n" #: quota.c:63 #, fuzzy msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-P, --project display quota for project\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" " --always-resolve always try to translate name to id, even if it " "is\n" "\t\t\t composed of only digits\n" "-w, --no-wrap do not wrap long lines\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-l, --local-only do not query NFS filesystems\n" "-Q, --quiet-refuse do not print error message when NFS server " "does\n" " not respond\n" "-i, --no-autofs do not query autofs mountpoints\n" "-F, --format=formatname display quota of a specific format\n" "-f, --filesystem-list display quota information only for given\n" " filesystems\n" " --filesystem=path display quota information only for given\n" " filesystem, remaining command line arguments\n" " are still treated as user/group/project names\n" "-A, --all-nfs display quota for all NFS mountpoints\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" " --show-mntpoint show mount point of the file system in output\n" " --hide-device do not show file system device in output\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "\n" "-u, --user zobrazí kvótu uživatele\n" "-g, --group zobrazí kvótu skupiny\n" "-q, --quiet vypisuje stručnější hlášky\n" "-v, --verbose vypisuje podrobnější hlášky\n" "-s, --human-readable čísla zobrazí v přirozeném tvaru (MB, GB…)\n" " --always-resolve vždy zkusí přeložit jméno na ID, i když je " "tvořeno\n" " jen číslicemi\n" "-w, --no-wrap nezalamuje dlouhé řádky\n" "-p, --raw-grace dobu odkladu vypíše v sekundách od počátku epochy\n" "-l, --local-only nedotazuje se souborových systémů přes NFS\n" "-Q, --quiet-refuse nevypisuje chybové hlášení, když NFS server " "neodpoví\n" "-i, --no-autofs nedotazuje se bodů připojení typu autofs\n" "-F, --format=FORMÁT zobrazí kvótu určeného FORMÁTU\n" "-f, --filesystem-list zobrazí údaje o kvótách jen pro zadané systémy\n" " souborů\n" "-A, --nfs-all zobrazí kvóty pro všechny místa připojení typu " "NFS\n" "-m, --no-mixed-pathnames odstraní úvodní lomítka z míst připojení typu " "NFSv4\n" " --show-mntpoint zobrazí bod připojení systému souborů\n" " --hide-device nezobrazí zařízení systému souborů\n" "-h, --help zobrazí tuto nápovědu a skončí\n" "-V, --version zobrazí údaje o verzi a skončí\n" "\n" #: quota.c:103 msgid "space" msgstr "místo" #: quota.c:105 msgid "blocks" msgstr "bloky" # FIXME: third argument is first character of first argument # (user/group → u/g-id). This is not localizable. #: quota.c:107 #, c-format msgid "Disk quotas for %s %s (%cid %u): %s\n" msgstr "Diskové kvóty pro %s %s (%cid %u): %s\n" # FIXME: printf(3) counts bytes, not columns #: quota.c:110 msgid "Filesystem" msgstr "Souborovy system" # FIXME: printf(3) counts bytes, not columns #: quota.c:111 quota.c:112 msgid "quota" msgstr "kvota" # FIXME: printf(3) counts bytes, not columns #: quota.c:111 quota.c:112 msgid "limit" msgstr "limit" # FIXME: printf(3) counts bytes, not columns #: quota.c:111 quota.c:112 msgid "grace" msgstr "odklad" # FIXME: printf(3) counts bytes, not columns #: quota.c:112 msgid "files" msgstr "souboru" #: quota.c:193 msgid "File limit reached on" msgstr "Omezení počtu souborů dosaženo na" #: quota.c:199 msgid "In file grace period on" msgstr "V periodě odkladu počtu souborů na" #: quota.c:203 msgid "Over file quota on" msgstr "Kvóta na počet souborů přesažena na" #: quota.c:209 msgid "Block limit reached on" msgstr "Omezení na počet bloků dosaženo na" #: quota.c:215 msgid "In block grace period on" msgstr "V periodě odkladu počtu bloků na" #: quota.c:219 msgid "Over block quota on" msgstr "Kvóta na počet bloků překročena na" #: quota.c:282 msgid "no limited resources used" msgstr "" #: quota.c:390 #, fuzzy msgid "Not enough memory for filesystem names" msgstr "Nedostatek paměti pro tvorbu názvu souboru s PID.\n" #: quota.c:407 #, c-format msgid "Warning: Ignoring -%c when filesystem list specified.\n" msgstr "Pozor: Je-li zadán seznam souborových systémů, -%c bude ignorován.\n" #: quota.c:416 msgid "No filesystem specified.\n" msgstr "Nezadán žádný systém souborů.\n" #: quota.c:424 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "Alokace množiny GID (%d): %s\n" #: quota.c:430 #, c-format msgid "getgroups(): %s\n" msgstr "getgroups(): %s\n" #: quota.c:435 #, fuzzy msgid "Project reports not supported without project name\n" msgstr "Formát kvóty není podporován jádrem.\n" #: common.c:129 #, c-format msgid "Quota utilities version %s.\n" msgstr "Kvótové nástroje (quota-tools) verze %s.\n" #: common.c:130 #, c-format msgid "Compiled with:%s\n" msgstr "Přeloženo s:%s\n" #~ msgid "Line %d too long. Truncating.\n" #~ msgstr "Řádek %d je příliš dlouhý. Bude zkrácen.\n" #~ msgid "Error in config file (line %d), ignoring\n" #~ msgstr "Chyba v konfiguračním souboru (řádek %d), ignoruje se.\n" #~ msgid "Possible error in config file (line %d), ignoring\n" #~ msgstr "Možná chyba v konfiguračním souboru (řádek %d), ignoruje se.\n" #~ msgid "Cannot duplicate descriptor of file to write to: %s\n" #~ msgstr "Deskriptor souboru nelze zmnožit pro zápis: %s\n" #~ msgid "Cannot duplicate descriptor of temp file: %s\n" #~ msgstr "Deskriptor dočasného souboru nelze zmnožit: %s\n" #~ msgid "Cannot duplicate descriptor of file to edit: %s\n" #~ msgstr "Deskriptor editovaného souboru nelze zmnožit: %s\n" #~ msgid "cannot create TCP service.\n" #~ msgstr "TCP službu nelze vytvořit.\n" #~ msgid "unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n" #~ msgstr "nelze zaregistrovat (RQUOTAPROG, RQUOTAVERS, TCP.)\n" #~ msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" #~ msgstr "nelze zaregistrovat (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" #~ msgid "Error while editing individual grace times.\n" #~ msgstr "Chyba při úpravě jednotlivých dob odkladu.\n" #~ msgid "" #~ "LDAP library does not support ldap_initialize() but URI is specified." #~ msgstr "LDAP knihovna nepodporuje ldap_initialize(), třebaže je zadáno URI." #~ msgid "cannot create tcp service.\n" #~ msgstr "TCP službu nelze vytvořit.\n" # TODO: Upper-case TCP #~ msgid "unable to register (RQUOTAPROG, RQUOTAVERS, tcp).\n" #~ msgstr "Nelze zaregistrovat (RQUOTAPROG, RQUOTAVERS, TCP).\n" # TODO: Upper-case TCP #~ msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, tcp).\n" #~ msgstr "Nelze zaregistrovat (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" #~ msgid "XFS quota format needs no checking.\n" #~ msgstr "Kvóta formátu XFS nevyžaduje žádnou kontrolu.\n" #~ msgid "Operation not supported for filesystems with hidden quota files!\n" #~ msgstr "" #~ "U souborových systémů se skrytými kvótovými soubory není operace " #~ "podporována\n" # TODO: internationalize first argument #~ msgid "Quotas for %s %s:\n" #~ msgstr "Kvóty pro %s %s:\n" #~ msgid "%s %d, limits (soft = %d, hard = %d)\n" #~ msgstr "%s %d, limity (měkký = %d, pevný = %d)\n" #~ msgid "blocks in use:" #~ msgstr "použitých bloků:" #~ msgid "\tinodes in use:" #~ msgstr "\tpoužitých iuzlů:" #~ msgid "%s - bad format\n" #~ msgstr "%s – chybný formát\n" #~ msgid "%s - %s -- bad format\n" #~ msgstr "%s – %s – chybný formát\n" #~ msgid " blocks in use: %llu, limits (soft = %llu, hard = %llu)" #~ msgstr " použitých bloků: %llu, limity (měkký = %llu, pevný = %llu)" #~ msgid "%s - %s -- bad format\n" #~ msgstr "%s – %s – chybný formát\n" #~ msgid "\tinodes in use: %llu, limits (soft = %llu, hard = %llu)" #~ msgstr "\tpoužitých iuzlů: %llu, limity (měkký = %llu, pevný = %llu)" #~ msgid "block grace period: %s, file grace period: %s\n" #~ msgstr "perioda odkladu bloků: %s, perioda odkladu souborů: %s\n" #~ msgid " block grace period: %d %s file grace period: %d %s" #~ msgstr " perioda odkladu bloků: %d %s perioda odkladu souborů: %d %s" #~ msgid "Cannot find device of loopback mount in options for %s. Skipping.\n" #~ msgstr "" #~ "Z voleb připojení %s nelze určit zařízení připojené přes loopback.\n" #~ " Přeskakuje se.\n" #~ msgid "Cannot stat() loopback device %s: %s\n" #~ msgstr "Nad loopback zařízením %s nelze zavolat stat(): %s\n" #~ msgid "Loopback device %s is not block device!\n" #~ msgstr "Loopback zařízení %s není blokovým zařízením!\n" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/de.gmo��������������������������������������������������������������������������������0000664�0000000�0000000�00000157200�14463210551�0014317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D ��3��l������8#��3���9#��D���m#��C���#��@���#����7$����%��=���'��K���'��Y���(��C���n(�����(�����(�����(�����(�����)�����%)�����<)�����S)��B���j)�� ���)�����)�����)��0���)��)���*�����9*�����Y*�����x*�����*�����*�����*�����*�����*����� +�����)+�����F+�����M+�� ���U+�� ���_+��&���i+��&���+��7��+�����-�����t.�����.��2���.�� ���1/��&���R/��9���y/��8���/��"���/��-���0��G���=0�����0�����0��A���0��7���0��3���)1�����]1��!���c1�����1�� ���1��+���1�����1�� ���1�� ���1��-���2��5���22��*���h2��#���2��?���2��"���2��%���3��"���@3��.���c3��4���3��#���3�����3��&���4��!���*4��A���L4��Q���4��6���4�� ���5�����85�����H5��*���a5��5���5��'���5��.���5��M���6��%���g6��9���6��7���6��&���6�����&7��4���77�����l7��<���7�����7��8���7�� ���8��"���<8��(���_8��1���8��)���8��*���8��!���9�����19��O���M9��*���9��#���9��"���9��&���:�����6:��*���J:��(���u:�����:��/���:��"���:��*��� ;��%���5;�����[;�����y;��/���;��3���;�����;��2���<��.���G<��)���v<��%���<��.���<��(���<��-���=��*���L=�����w=�����=��2���=��G���=�����/>��V���>��.���0?��)���_?�� ���?��&���?�����?��&���?��2���@��8���G@��1���@�����@�����@��/���@����� A�����>A�����]A��3���|A��2���A��$���A�� ���B�����)B��C���AB��$���B��T���B��S���B��#���SC�����wC�����C��"���C��-���C�����D��$���!D�����FD��$���dD�����D�����D�����D��5���D����� E��%���E�����EE��.���cE�� ���E�����E�����E��H���E��$���F��'���BF��!���jF��$���F��$���F�����F�����F����� G��,���(G��$���UG��=���zG��!���G�����G�����G�����G�����H��!���?H�����aH��9���~H��5���H��*���H��!���I��0���;I��%���lI�����I�� ���I�����I��6���I��6����J��"���7J��2���ZJ��7���J��3���J��6���J�����0K�����AK�� ���WK��L���bK�����K�����K�����K�����K�����L��_���6L��m���L�����M��#���!M��3���EM�����yM�����M��2���M�����M��}���PN�����N��n���N��(���QO�����zO�����O�����P�����,P��G���DP�����P��'���P�� ���P��2���P�����P�����Q�����0Q��i���KQ�� ���Q�����Q��,���Q��8���R��1���:R��N���lR��<���R��#���R��=���S�����ZS��(���uS��)���S��!���S�����S��$���T��5���)T��/���_T�����T��1���T��F���T��F���U�� ���cU�� ���U�����U�����U�����U�����U�����V��1���4V�����fV�����V�����V��%���V�����V��4���V��4���V�����2W�����FW��9���YW��7���W��G���W��G���X��6���[X��0���X��0���X��W���X��x���LY��*���Y��:���Y��O���+Z�����{Z��,���Z��&���,[��'���S[��S���{[��D���[�����\�����1\�����Q\��3���q\�����\��$���\�����\������]��*���]��,���J]�����w]��1���]��X���]��P���^�����e^�����w^��2���^�����^��;���^��/���^��J���,_�����w_��.���_��(���_��4���_��0���`�����M`��1���m`��2���`��2���`��(���a��(���.a��$���Wa��N���|a�����a�����a����b��q��d��j�� f�����vg����{g����k��N���xm��5���m��5���m��.���3n��N���bn��)���n��M���n��8���)o�����bo��O���jo��)���o��6���o��$���p��1���@p��#���rp��*���p��'���p��<���p�����&q��X���q�����%r�����5r�����Er�����Yr�����nr�����r�����r��I���r��A���r��A���:s�����|s�����s��$���s��%���s��5���s����� t�����3t�����Gt�����dt��7���jt�����t�����t�����t�����t�����t�����u�����u����� u��5���:u��1���pu�����u�����u�����u�����u�����u�� ���u�����u�����u�����u�����v�����)v�����Dv�����Jv�����\v�����vv�����v�����v�����v����v��3���Ex��F���yx��G���x��@���y����Iy����f{��=���}��Q���}��Z���~��A���n~�����~�����~�����~�����~����� �����#�����:�����Q��B���h�� ���������� �����4�����2�����(���E�� ���n�� �������������̀�����Հ������� ����� ���&�����G�����g�����n�� ���v�� �����(�����(�������܁����������(�����ƅ��H���υ��"�����)���;��?���e��@�����0�����5�����h���M����������ˇ��P�����D���;��E��������ƈ��*���̈������� �����+��������K�� ���c�����q��6�����K�����;�����-���?��k���m��*���ي��,�����)���1��:���[��=�����*���ԋ�������/�����(���O��N���x��c���nj��D���+��-���p�������!�����0�����B�����4���T��8�����`���Ž��0���#��H���T��E�����.����������B���-��)���p��U�����%�����K�����,���b��:�����C���ʑ��;�����7���J��8�����,�����*�����|�����6�����3���Ǔ��,�����7���(�����`��8���{��/����� �����8�����*���>��;���i��9�����%���ߕ��(�����@���.��C���o�������:���Җ��:��� ��9���H��A�����3���ė��3�����?���,��.���l��#�����%�����F�����f���,�������c���p��3���Ԛ��3�����-���<��,���j��!�����-�����N�����I���6��9�����&�����'�����X��� ��3���b��2�����9���ɝ��A�����A���E��7�����1�����$�����O�����4���f��u�����s�����+�����+�����$���ݠ��+�����6���.��'���e��.�����2�����)�����-�����'���G�����o��D��������Ǣ��,���ܢ��%��� ��7���/�����g��"���z�������b�����'�����,���@��)���m��+�����;���ä��$��������$��%���8��8���^��'�����b�����.���"��&���Q�����x��*�����,�����*���צ��#�����<���&��6���c��0����� ���˧��4�����5���!�����W�����g�� ���p��M�����I���ߨ��(���)��;���R��>�����@���ͩ��A�����!���P�����r�� �����N�����1�����'��������?�����X�� ���v��h�����s������-���t��#�����C���Ƭ����� �������8���.�����g�����������������'���7�����_�����x����������7��S���S�������(��������հ��5�������������5�����U�����p�� ����������0�����8���@��E���y��a�����Q���!��%���s��P����� �����=��� ��.���I��2���x�������4���ȴ��7�����5���5�����k��2�����U�����U��� ��.���a��#�����!�����%���ֶ��$�����'���!��)���I��;���s��-��������ݷ�������?��������$��;���@��;���|����������Ѹ��B�����E���-��N���s��u���¹��>���8��4���w��;�����j��������S��4�����A���&��^���h�����Ǽ��4���{��0�����+�����f��� ��T���t��!���ɾ��*�����)�����I���@�� �����/��������ۿ��"�����'�����=���B�������<�����d�����V���2������������7����������Y�����?���L��\����������Q�����+���S��?�����K�����$��� ��H���0��I���y��B�����-�����6���4��-���k��`������������������������������6����?��(�����e���)��8�����8�����9�����e���;��1�����e�����H���9�������[�����2�����D�����6���^��2�����$�����3�����/���!��H���Q�������r���y��������������������&��"���@�����c��!���k��d�����L�����M���?������� �����+�����'�����8��� �����C�����W��"���q�������D�����������������������)�����C�����]�� ���w�������D�����F��������+�����1�����6�����:�����=�� ���\�����i�����o����������������������������������������4�����E�����c������������E����R���������;�������v���r��������J��������������������������<����������� ���N������?���������K�������������������������������t��R������b���H�� ��x���i���?���*�������������������������q���3���������m��/������������������������*��e�����!���c��+��5������u���������)�����������������������2��p���G���w�������������Y���#�����������}�� ���s��� ���t���r����e�������#�������g��������y�����������������|���������1���:����{���9�����.���0�������l��'�����[�������������.����A�������3��������������������������������������@��d���n�������������������������&���b����M��X���1�����������L������������^��������������F��������d��-��������S�����a���������>����������������Z�����z���H�������������]���2��������N������������_���������������"���������$��������������������������&�����}���5���'�������O������0���������������� �����������������p��������:���)��W�������������@��������������������������7��C����������������������������G��f�� ��D�����������������������O���I������%��������J���+���|�����������m������o�������������C��9���W���F������������Z���-������v��������������"��n���������^�����P������\������������������������������Y���������a���Q���4�����������������������������U��g�������`�� ���������������������j��������������x���������h���c�������Q���������(��������������������������{�����4������������������������������������X��k������w���6���������~���8�������������B������������������=��M���������������������������������������_����L���B������������������i����� ���l��������������o������������y������f���V���(��E����������k��=���S��������������������������j����������������[���V��P������������������%����������~�����������7������>��������I��q��������������������������T������ ������������u�����������������s��U���/���������$����z���������������������;��� ��K����������`���!�� ���A��,���������������������������D�����6���������T������<������h��8���\�������]����,�� ��� Adding %s size %lld ino %d links %d uid %u gid %u � quota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ... � quota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ... � Block limits File limits � Please cleanup the group data before the grace period expires. Basically, this means that the system thinks group is using more disk space on the above partition(s) than it is allowed. If you do not delete files and get below group quota before the grace period expires, the system will prevent you and other members of the group from creating new files owned by the group. For additional assistance, please contact us at %s or via phone at %s. � We hope that you will cleanup before your grace period expires. Basically, this means that the system thinks you are using more disk space on the above partition(s) than you are allowed. If you do not delete files and get below your quota before the grace period expires, the system will prevent you from creating new files. For additional assistance, please contact us at %s or via phone at %s. � %s limits File limits � Filesystem block grace inode grace � Filesystem blocks soft hard inodes soft hard � Filesystem Block grace period Inode grace period � cache hits: %u � cache misses: %u � dquot dups: %u � dquot wants: %u � inact reclaims: %u � missed reclaims: %u � reclaims: %u � shake reclaims: %u �%-9s used soft hard grace used soft hard grace �%02d:%02d�%ddays�%s (gid %d): Permission denied �%s (gid %d): error while trying getgroups(): %s �%s (gid %d): gid set allocation (%d): %s �%s (uid %d): Permission denied �%s [%s]: %s quotas turned off �%s [%s]: %s quotas turned on �%s quota on %s (%s) is %s �%s: %s �%s: %s quotas turned off �%s: %s quotas turned on �%s: %s root_squash turned off �%s: %s root_squash turned on �%s: deleted %s quota blocks �%udays�%uhours�%uminutes�%useconds�*** Report for %s quotas on device %s �*** Status for %s quotas on device %s �-F, --format=formatname edit quotas of a specific format -p, --prototype=name copy data from a prototype user/group --always-resolve always try to resolve name, even if it is composed only of digits -f, --filesystem=filesystem edit data only on a specific filesystem -t, --edit-period edit grace period -T, --edit-times edit grace time of a user/group -h, --help display this help text and exit -V, --version display version information and exit �-r, --remote edit remote quota (via RPC) -m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints �-r, --remote set remote quota (via RPC) -m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints �0seconds�Accounting [ondisk]: %s; Enforcement [ondisk]: %s �Accounting: %s; Enforcement: %s �Adding dquot structure type %s for %d �Administrator for a group %s not found. Cancelling mail. �Allocated %d bytes memory Free'd %d bytes Lost %d bytes �Already accounting %s quota on %s �As you wish... Canceling check of this file. �Bad file magic or version (probably not quotafile with bad endianity). �Bad format: %s �Bad number of arguments. �Bad time units. Units are 'second', 'minute', 'hour', and 'day'. �Batch mode and prototype user cannot be used together. �Batch mode cannot be used for setting grace times. �Block�Block %u in tree referenced twice�Block %u is truncated. �Block %u: �Block grace time: %s; Inode grace time: %s �Block limit reached on�Bugs to %s �Bugs to: %s �Cannot access the specified xtab file %s: %s �Cannot allocate new quota block (out of disk space). �Cannot change owner of temporary file: %s �Cannot change permission of %s: %s �Cannot change state of XFS quota. It's not compiled in kernel. �Cannot commit dquot for id %u: %s �Cannot connect to netlink socket: %s �Cannot connect to system DBUS: %s �Cannot create DBUS message: No enough memory. �Cannot create file for %ss for new format on %s: %s �Cannot create new quotafile %s: %s �Cannot create pipe: %s �Cannot create set for sigaction(): %s �Cannot create temporary file: %s �Cannot delete %s quota on %s - switch quota accounting off first �Cannot delete %s quota on %s - switch quota enforcement and accounting off first �Cannot detect quota format for journalled quota on %s �Cannot duplicate descriptor: %s �Cannot exec %s �Cannot execute '%s': %s �Cannot find a device with %s. Skipping... �Cannot find a filesystem mountpoint for directory %s �Cannot find any quota file to work on. �Cannot find checked quota file for %ss on %s! �Cannot find filesystem to check or filesystem not mounted with quota option. �Cannot find mountpoint for device %s �Cannot find quota file on %s [%s] to turn quotas on/off. �Cannot find quota option on filesystem %s with quotas! �Cannot finish IO on new quotafile: %s �Cannot fork: %s �Cannot gather quota data. Tree root node corrupted. �Cannot get device name for %s �Cannot get exact used space... Results might be inaccurate. �Cannot get host name: %s �Cannot get info for %s quota file from kernel on %s: %s �Cannot get name for uid/gid %u. �Cannot get name of new quotafile. �Cannot get name of old quotafile on %s. �Cannot get quota for %s %d from kernel on %s: %s �Cannot get quota information for user %s �Cannot get quota information for user %s. �Cannot get quotafile name for %s �Cannot get system info: %s �Cannot guess format from filename on %s. Please specify format on commandline. �Cannot initialize IO on new quotafile: %s �Cannot initialize mountpoint scan. �Cannot initialize quota on %s: %s �Cannot join quota multicast group: %s �Cannot open %s: %s �Cannot open %s: %s Will use device names. �Cannot open any file with mount points. �Cannot open file %s: %s �Cannot open file with group administrators: %s �Cannot open new quota file %s: %s �Cannot open old format file for %ss on %s �Cannot open old quota file on %s: %s �Cannot open quotafile %s: %s �Cannot parse input line %d. �Cannot parse line %d in quotatab (missing ':') �Cannot parse time at CC_BEFORE variable (line %d). �Cannot read block %u: %s �Cannot read entry for id %u from quotafile %s: %s �Cannot read first entry from quotafile %s: %s �Cannot read header from quotafile %s: %s �Cannot read header of old quotafile. �Cannot read individual grace times from file. �Cannot read info from quota file %s: %s �Cannot read information about old quotafile. �Cannot read quota structure for id %u: %s �Cannot read quotas from file. �Cannot read stat file %s: %s �Cannot register callback for netlink messages: %s �Cannot remount filesystem %s read-write. cannot write new quota files. �Cannot remount filesystem mounted on %s read-only so counted values might not be right. Please stop all programs writing to filesystem or use -m flag to force checking. �Cannot remount filesystem mounted on %s read-only. Counted values might not be right. �Cannot rename new quotafile %s to name %s: %s �Cannot rename old quotafile %s to %s: %s �Cannot reset signal handler: %s �Cannot resolve mountpoint path %s: %s �Cannot resolve path %s: %s �Cannot resolve quota netlink name: %s �Cannot set both individual and global grace time. �Cannot set info for %s quota file from kernel on %s: %s �Cannot set quota for %s %d from kernel on %s: %s �Cannot set signal handler: %s �Cannot set socket options: %s �Cannot stat device %s (maybe typo in quotatab) �Cannot stat directory %s: %s �Cannot stat mountpoint %s: %s �Cannot stat quota file %s: %s �Cannot stat() a mountpoint with %s: %s Skipping... �Cannot stat() given mountpoint %s: %s Skipping... �Cannot stat() mounted device %s: %s �Cannot stat() mountpoint %s: %s �Cannot statfs() %s: %s �Cannot switch off %s quota accounting on %s when enforcement is on �Cannot sync quotas on device %s: %s �Cannot turn %s quotas off on %s: %s Kernel won't know about changes quotacheck did. �Cannot turn %s quotas on on %s: %s Kernel won't know about changes quotacheck did. �Cannot turn on/off quotas via RPC. �Cannot wait for mailer: %s �Cannot write block (%u): %s �Cannot write grace times to file. �Cannot write individual grace times to file. �Cannot write quota (id %u): %s �Cannot write quota for %u on %s: %s �Cannot write quotas to file. �Checked %d directories and %d files �Checking quotafile headers... �Checking quotafile info... �Compiled with:%s �Continue checking assuming version from command line?�Corrupted blocks: �Corrupted number of used entries (%u)�Could not get values for %s. �Creation of %s quota format is not supported. �Data dumped. �Denied access to host %s �Detected quota format %s �Device (%s) filesystem is mounted on unsupported device type. Skipping. �Disabling %s quota accounting on %s �Disabling %s quota enforcement %son %s �Disk quotas for %s %s (%cid %d): �Disk quotas for %s %s (%cid %u): %s �Do not know how to buffer format %d �Dumping gathered data for %ss. �Duplicated entries.�EXT2_IOC_GETFLAGS failed: %s �Enable XFS %s quota accounting during mount �Enabling %s quota enforcement on %s �Enabling %s quota on root filesystem (reboot to take effect) �Enforcing %s quota already on %s �Entry for id %u is truncated. �Error�Error checking device name: %s �Error parsing netlink message. �Error while editing grace times. �Error while editing quotas. �Error while getting old quota statistics from kernel: %s �Error while getting quota statistics from kernel: %s �Error while opening old quota file %s: %s �Error while releasing file on %s �Error while searching for old quota file %s: %s �Error while syncing quotas on %s: %s �Error with %s. �Exitting. �Failed to delete quota: %s �Failed to find tty of user %llu to report warning to. �Failed to open tty %s of user %llu to report warning. �Failed to parse grace times file. �Failed to read or parse quota netlink message: %s �Failed to remove IMMUTABLE flag from quota file %s: %s �Failed to write message to dbus: No enough memory. �Failed to write quota message for user %llu to %s: %s �File info done. �File limit reached on�Filesystem�Filesystem used soft hard grace used soft hard grace �Filesystem remounted RW. �Filesystem remounted read-only �First entry loaded. �Found an invalid UUID: %s �Found i_num %ld, blocks %ld �Found more structures for ID %u. Using values: BHARD: %lld BSOFT: %lld IHARD: %lld ISOFT: %lld �Found more structures for ID %u. Values: BHARD: %lld/%lld BSOFT: %lld/%lld IHARD: %lld/%lld ISOFT: %lld/%lld �Gid set allocation (%d): %s �Going to check %s quota file of %s �Grace period before enforcing soft limits for %ss: �Group�Headers checked. �Headers of file %s checked. Going to load data... �Hi, We noticed that the group %s you are member of violates the quotasystem used on this system. We have found the following violations: �Hi, We noticed that you are in violation with the quotasystem used on this system. We have found the following violations: �High uid detected. �ID %u has more structures. User intervention needed (use -i for interactive mode or -n for automatic answer). �Illegal free block reference to block %u�Illegal port number: %s �Illegal reference (%u >= %u) in %s quota file on %s. Quota file is probably corrupted. Please run quotacheck(8) and try again. �In block grace period on�In file grace period on�Incorrect format string for variable %s. Unrecognized expression %%%c. �Info�Inode: #%llu (%llu blocks, %u extents) �Inode: none �Inserting already present quota entry (block %u). �Invalid argument "%s" �Kernel quota version: %u.%u.%u �Kernel quota version: old �LDAP library version >= 2.3 detected. Please use LDAP_URI instead of hostname and port. Generated URI %s �Leaving %s �Line %d too long. �Loading first quota entry with grace times. �Maximum %u dquots (currently %u incore, %u on freelist) �Maybe create new quota files with quotacheck(8)? �Metadata init_io called when kernel does not support generic quota interface! �Metadata init_io called when kernel support is not enabled. �Mountpoint %s is not a directory?! �Mountpoint (or device) %s not found or has no quota enabled. �Mountpoint not specified. �Name must be quotaon or quotaoff not %s �Name of quota file too long. Contact %s. �No correct mountpoint specified. �No filesystem specified. �No filesystems with quota detected. �No possible destination for messages. Nothing to do. �Not all specified mountpoints are using quota. �Not enough memory. �Not found any corrupted blocks. Congratulations. �Not setting block grace time on %s because softlimit is not exceeded. �Not setting inode grace time on %s because softlimit is not exceeded. �Number of allocated dquots: %ld �Number of dquot cache hits: %ld �Number of dquot drops: %ld �Number of dquot lookups: %ld �Number of dquot reads: %ld �Number of dquot writes: %ld �Number of free dquots: %ld �Number of in use dquot entries (user/group): %ld �Number of quotafile syncs: %ld �OFF�ON�Old file found removed during check! �Old file not found. �Only RPC quota format is allowed on NFS filesystem. �Only XFS quota format is allowed on XFS filesystem. �Over block quota on�Over file quota on�Parse error at line %d. Cannot find administrators name. �Parse error at line %d. Cannot find end of group name. �Parse error at line %d. Trailing characters after administrators name. �Prototype name does not make sense when editing grace period or times. �Prototype user has no sense when editing grace times. �Quota enforcement already disabled for %s on %s �Quota file %s has IMMUTABLE flag set. Clearing. �Quota file %s has corrupted headers. You have to specify quota format on command line. �Quota file format version %d does not match the one specified on command line (%d). Quota file header may be corrupted. �Quota file not found or has wrong format. �Quota file on %s [%s] does not exist or has wrong format. �Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file. �Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file. Please turn quotas off or use -f to force checking. �Quota for id %u referenced but not present. �Quota format not supported in kernel. �Quota not supported by the filesystem. �Quota structure for %s owning quota file not present! Something is really wrong... �Quota structure has offset to other block (%u) than it should (%u). �Quota utilities version %s. �Quota write failed (id %u): %s �RPC quota format not compiled. �RPC quota format specified for non-NFS filesystem. �Reference to illegal block %u�Renaming new files to proper names. �Renaming new quotafile �Renaming old quotafile to %s~ �Repquota cannot report through RPC calls. �Required format %s not supported by kernel. �Scanning %s [%s] �Scanning stored directories from directory stack �Setting grace times and other flags to default values. Assuming number of blocks is %u. �Size of file: %lu Blocks: %u Free block: %u Block with free entry: %u Flags: %x �Skipping %s [%s] �Skipping line. �Something weird happened while scanning. Error %d �Space�Specified both -n and -t but only one of them can be used. �Specified path %s is not directory nor device. �Statistics: Total blocks: %u Data blocks: %u Entries: %u Used average: %f �Substracted %lu bytes. �Substracting space used by old %s quota file. �The running kernel does not support XFS �Time units may be: days, hours, minutes, or seconds �Times to enforce softlimit for %s %s (%cid %d): �Too many parameters to editor. �Trying to write info to readonly quotafile on %s �Trying to write info to readonly quotafile on %s. �Trying to write quota to readonly quotafile on %s �Unable to resolve name '%s' on line %d. �Unexpected XFS quota state sought on %s �Unknown action should be performed. �Unknown format of kernel netlink message! Maybe your quota tools are too old? �Unknown option '%c'. �Unknown quota format: %s Supported formats are: vfsold - original quota format vfsv0 - standard quota format vfsv1 - quota format with 64-bit limits rpc - use RPC calls xfs - XFS quota format �Usage: %s [options] Options are: -h --help shows this text -V --version shows version information -F --foreground starts the quota service in foreground -I --autofs do not ignore mountpoints mounted by automounter -p --port <port> listen on given port -s --no-setquota disables remote calls to setquota (default) -S --setquota enables remote calls to setquota -x --xtab <path> set an alternative file with NFSD export table �Usage: %s [options] Options are: -h --help shows this text -V --version shows version information -F --foreground starts the quota service in foreground -I --autofs do not ignore mountpoints mounted by automounter -p --port <port> listen on given port -x --xtab <path> set an alternative file with NFSD export table �Usage: %s [options] Options are: -h --help shows this text -V --version shows version information -C --no-console do not try to write messages to console -b --print-below write to console also information about getting below hard/soft limits -D --no-dbus do not try to write messages to DBUS -F --foreground run daemon in foreground �User�Utility for checking and repairing quota files. %s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a -u, --user check user files -g, --group check group files -c, --create-files create new quota files -b, --backup create backups of old quota files -f, --force force check even if quotas are enabled -i, --interactive interactive mode -n, --use-first-dquot use the first copy of duplicated structure -v, --verbose print more information -d, --debug print even more messages -m, --no-remount do not remount filesystem read-only -M, --try-remount try remounting filesystem read-only, continue even if it fails -R, --exclude-root exclude root when checking all filesystems -F, --format=formatname check quota files of specific format -a, --all check all filesystems -h, --help display this message and exit -V, --version display version information and exit �Utility for converting quota files. Usage: %s [options] mountpoint -u, --user convert user quota file -g, --group convert group quota file -e, --convert-endian convert quota file to correct endianity -f, --convert-format oldfmt,newfmt convert from old to VFSv0 quota format -h, --help show this help text and exit -V, --version output version information and exit �WARNING - Quotafile %s was probably truncated. Cannot save quota settings... �WARNING - %s: cannot change current block allocation �WARNING - %s: cannot change current inode allocation �WARNING - Quota file %s has corrupted headers �WARNING - Quota file %s was probably truncated. Cannot save quota settings... �WARNING - Quota file info was corrupted. �WARNING - Quotafile %s was probably truncated. Cannot save quota settings... �WARNING - Some data might be changed due to corruption. �Warning�Warning: Cannot open export table %s: %s Using '/' as a pseudofilesystem root. �Warning: Cannot set EXT2 flags on %s: %s �Warning: Ignoring -%c when filesystem list specified. �Warning: Mailer exitted abnormally. �Warning: No quota format detected in the kernel. �XFS Quota Manager dquot statistics �XFS quota allowed only on XFS filesystem. �You have to specify action to perform. �You have to specify source and target format of conversion. �Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. �Your quota file is stored in wrong endianity. Please use convertquota(8) to convert it. �and accounting �bad format: %s �block limit reached�block quota exceeded�block quota exceeded too long�blocks�cannot find %s on %s [%s] �cannot write times for %s. Maybe kernel does not support such operation? �copy_user_quota_limits: Failed to get userquota for uid %ld : %s �copy_user_quota_limits: Failed to set userquota for uid %ld : %s �done �error (%d) while opening %s �error (%d) while opening inode scan �error (%d) while starting inode scan �error while getting quota from %s for %s (id %u): %s �file limit reached�file quota exceeded�file quota exceeded too long�files�find_free_dqentry(): Data block full but it shouldn't. �fsname mismatch �getgroups(): %s �got below block limit�got below block quota�got below file limit�got below file quota�grace�group %s does not exist. �host %s attempted to call setquota from port >= 1024 �host %s attempted to call setquota when disabled �limit�none�off�on�popd %s Entering directory %s �pushd %s/%s �quota�quotactl on %s [%s]: %s �quotactl on %s: %s �quotactl() on %s: %s �set root_squash on %s: %s �space�svc_run returned �unable to free arguments �unknown quota warning�unset�user %s does not exist. �using %s on %s [%s]: %s �Project-Id-Version: quota-tools Report-Msgid-Bugs-To: jack@suse.cz PO-Revision-Date: 2010-02-21 13:10+0100 Last-Translator: Michael Bunk <mb@computer-leipzig.com> Language-Team: German <translation-team-de@lists.sourceforge.net> Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: German X-Poedit-Country: GERMANY � Adding %s size %lld ino %d links %d uid %u gid %u � quota [-qvswim] [-l | [-Q | -A]] [-F Quotaformat] -g Gruppenname ... � quota [-qvswim] [-l | [-Q | -A]] [-F Quotaformat] -u Benutzername ... � Blocklimits Dateilimits � Wir hoffen, dass Sie aufräumen bevor die Gnadenfrist abgelaufen ist. Sie erhalten diese Mitteilung, weil Sie auf den oben genannten Dateisystemen mehr Speicherplatz belegen bzw. Dateien angelegt haben, als ihnen erlaubt ist. Wenn Sie keinen Speicherplatz freigeben bzw. Dateien löschen und wieder unter ihr Quota kommen bevor die Gnadenfrist abgelaufen ist, werden Sie keinen weiteren Speicherplatz belegen bzw. keine weiteren Dateien anlegen können. Für Unterstützung wenden Sie sich bitte per E-Mail an %s oder per Telefon an %s. � Wir hoffen, dass Sie aufräumen bevor die Gnadenfrist abgelaufen ist. Sie erhalten diese Mitteilung, weil Sie auf den oben genannten Dateisystemen mehr Speicherplatz belegen bzw. Dateien angelegt haben, als Ihnen erlaubt ist. Wenn Sie keinen Speicherplatz freigeben bzw. Dateien löschen und wieder unter ihr Quota kommen bevor die Gnadenfrist abgelaufen ist, werden Sie keinen weiteren Speicherplatz belegen bzw. keine weiteren Dateien anlegen können. Für Unterstützung wenden Sie sich bitte per E-Mail an %s oder per Telefon an %s. � %s Limits Dateilimits � Dateisystem Blockgnadenfrist Inodegnadenfrist � Dateisystem Blöcke weich hart Inodes weich hart � Dateisystem Blockgnadenfrist Inodegnadenfrist � cache hits: %u � cache misses: %u � dquot dups: %u � dquot wants: %u � inact reclaims: %u � missed reclaims: %u � reclaims: %u � shake reclaims: %u �%-9s belegt weich hart Gnade belegt weich hart Gnade �%02d:%02d�%ddays�%s (Gid %d): Zugriff verweigert �%s (Gid %d): Fehler beim Aufruf von getgroups(): %s �%s (Gid %d): gid set Speicheranforderung (%d): %s �%s (Benutzer-Id %d): Zugriff verweigert �%s [%s]: %s Quotas abgeschalten �%s [%s]: %s Quotas angeschalten �%s-Quota auf %s (%s) ist %s �%s: %s �%s: %s-Quotas deaktiviert �%s: %s-Quotas aktiv �%s: %s root_squash abgeschalten �%s: %s root_squash angeschalten �%s: %s-Quota-Blöcke gelöscht �%udays�%uhours�%uminutes�%useconds�*** Report für %s Quotas auf Gerät %s �*** Status für %s-Quotas auf Gerät %s �-F, --format=formatname Quotas eines bestimmten Formats bearbeiten -p, --prototype=name Kopiere Daten von einem Vorlagenutzer/einer Vorlagegruppe --always-resolve Versuche stets, einen Namen aufzulösen, auch wenn er nur aus Ziffern besteht -f, --filesystem=filesystem Bearbeite nur Daten eines bestimmten Dateisystems -t, --edit-period Bearbeite Standard-Gnadenfrist -T, --edit-times Bearbeite Gradenfrist eines Nutzers/einer Gruppe -h, --help Zeige diesen Hilfetext and und beende das Programm -V, --version Zeige Versionsinformationen and und beende das Programm �-r, --remote entferne Quota bearbeiten (über RPC) -m, --no-mixed-pathnames entferne führende Schrägstriche von NFSv4-Mountpunkten �-r, --remote Setze entferntes Quota (über RPC) -m, --no-mixed-pathnames Entferne führende Schrägstriche (/) von NFSv4-Einhängepunkten �0seconds�Kontierung [auf Datenträger]: %s; Vollstreckung [auf Datenträger]: %s �Kontierung: %s; Vollstreckung: %s �Füge dquot-Strukturtyp %s für %d hinzu �Administrator für Gruppe %s nicht gefunden. Sende keine Mail. �%d Bytes Speicher belegt %d Bytes freigegeben %d Bytes verloren �Kontierung für %s-Quota auf %s ist schon aktiv �WIe du wünschst... breche Prüfung dieser Datei ab. �Falsche Magische Bytefolge oder Version (wahrscheinlich keine Quotadatei mit falscher Bytereihenfolge). �Falsches Format: %s �Falsche Anzahl an Argumenten. �Fehlerhafte Zeiteinheiten. Einheiten sind 'second', 'minute', 'hour' und 'day'. �Stapelmodus und Prototypen können nicht zusammen verwendet werden. �Stapelmodus kann nicht verwendet werden, um Gnadenfristen zu setzen. �Block�Block %u wird im Baum doppelt referenziert�Block %u ist abgeschnitten. �Block %u: �Blockgnadenfrist: %s; Inodegnadenfrist: %s �Blocklimit erreicht auf�Fehler an %s �Fehler an: %s �Kann auf angegebene xtab-Datei %s nicht zugreifen: %s �Kann keinen neune Quotablock belegen (kein Festplattenspeicherplatz mehr). �Kann Eigentümer einer temporären Datei nicht ändern: %s �Kann Zugriffsrechte von %s nicht ändern: %s �Kann Zustand des XFS-Quotas nicht ändern. Unterstützung dafür wurde nicht in den Kernel einkompiliert. �Kann dquot für id %u nicht speichern: %s �Kann nicht zum Netlink-Socket verbinden: %s �Kann nicht zum System-DBUS verbinden: %s �Kann DBUS-Nachricht nicht erzeugen: Nicht genug Speicher. �Kann Datei für %ss im neuen Format auf %s nicht anlegen: %s �Kann neue Quotadatei %s nicht anlegen: %s �Konnte keine Pipe erzeugen: %s �Kann Menge für sigaction() nicht erzeugen: %s �Kann temporäre Datei nicht anlegen: %s �Kann %s-Quota auf %s nicht löschen - deaktivieren Sie zuerst Quotakontierung �Kann %s-Quota auf %s nicht löschen - schalten Sie Quotavollstreckuckung und -kontierung zuerst ab �Kann das Quotaformat für das Journalquota auf %s nicht feststellen �Konnte Dateideskriptor nicht duplizieren: %s �Kann 'exec %s nicht ausführen �Konnte '%s' nicht ausführen: %s �Kann kein Gerät mit %s finden. Überspringe... �Kann keinen Dateisystem-Einhängepunkt für Verzeichnis %s finden �Kann keine Quotadatei finden, um sie zu bearbeiten. �Kann geprüfte Quotadatei für %ss auf %s nicht finden! �Kann kein Dateisystem zum Prüfen finden oder Dateisystem nicht mit der Quota-Option gemountet. �Kann Einhängepunkt für Gerät %s nicht finden �Kann Quotadatei auf %s [%s] nicht finden, um Quotas zu (de-)aktivieren. �Kann die Quotaoption auf dem Dateisystem %s mit Quotas nicht finden! �Kann IO an neuer Quotadatei nicht beenden: %s �fork() fehlgeschlagen: %s �Kann Quotadaten nicht laden. Der Baumwurzelknoten ist zerstört. �Kann Gerätenamen für %s nicht bekommen �Kann genau verwendeten Platz nicht bestimmen... Die Ergebnisse können ungenau sein. �Kann Rechnernamen nicht bekommen: %s �Kann Informationen für %s-Quotadatei auf %s nicht vom Kernel bekommen: %s �Kann Namen für uid/gid %u nicht auflösen. �Kann Namen der Quotadatei im neuen Format nicht bekommen. �Kann Namen der alten Quotadatei auf Dateisystem %s nicht bekommen. �Kann Quota für %s %d vom Kernel auf %s nicht bekommen: %s �Kann Quota-Informationen für Nutzer %s nicht erhalten �Kann Quota-Informationen für Nutzer %s nicht erhalten. �Kann Quotadateinamen für %s nicht erhalten �Kann Syseminformationen nicht abrufen: %s �Kann das Format nicht aus dem Dateinamen auf Dateisystem %s ableiten. Bitte geben Sie das Format auf der Kommandozeile an. �Kann IO für neue Quotadatei nicht initialisieren: %s �Kann die Mountpunkt-Prüfung nicht initialisieren. �Kann Quotas auf %s nicht initialisieren: %s �Kann mich Quota-Muticast-Gruppe nicht anschließen: %s �Kann %s nicht öffnen: %s �Kann %s nicht öffnen: %s Werde Gerätenamen verwenden. �Kann keine Datei mit Einhängepunkten öffnen. �Kann Datei nicht öffnen %s: %s �Kann Datei der Gruppenadministratoren nicht öffnen: %s �Kann neue Quotadatei %s nicht öffnen: %s �Kann Quotadatei alten Formats nicht für %ss in %s öffnen �Kann Quotadatei im alten Format auf %s nicht öffnen: %s �Kann Quotadatei nicht öffnen %s: %s �Kann Eingabezeile %d nicht verarbeiten. �Kann Zeile %d in Quotatabelle nicht verarbeiten (fehlender ':') �Kann die Zeit bei CC_BEFORE-Variable nicht verarbeiten (Zeile %d). �Kann Block nicht lesen %u: %s �Kann Eintrag für Id %u aus Quotadatei %s nicht lesen: %s �Kann ersten Eintrag aus der Quotadatei %s nicht lesen: %s �Kann Kopfinformationen aus Quotadatei %s nicht lesen: %s �Kann Kopfinformation einer Quotadatei alten Formats nicht lesen. �Kann einzelne Gnadenfristen nicht aus Datei lesen. �Kann Information nicht aus Quotadatei %s lesen: %s �Kann Information über Quotadatei im alten Format nicht lesen. �Kann Quotastruktur für Id %u nicht lesen: %s �Kann Quotas nicht aus Datei lesen. �Kann 'stat'-Datei %s nicht lesen: %s �Kann Callbackfunktion für Netlink-Nachrichten nicht registrieren: %s �Kann Dateisystem %s nicht als les- und schreibbar ummounten. Kann neue Quotadateien nicht schreiben. �Kann das Dateisystem auf %s nicht als nur-lesbar ummounten. Gezählte Werte könnten falsch sein. Bitte beenden Sie alle Programme, die auf das Dateisystem schreiben oder verwenden Sie -m, um die Prüfung zu erzwingen. �Kann das Dateisystem auf %s nicht als nur-lesbar ummounten. Gezählte Werte könnten falsch sein. �Kann neue Quotadatei %s nicht in %s umbenennen: %s �Kann alte Quotadatei %s nicht in %s umbenennen: %s �Kann Signalbehandler nicht zurücksetzen: %s �Kann Mountpunkt-Pfad %s nicht auflösen: %s �Kann Pfad %s nicht auflösen: %s �Kann Quota-Netlink-Namen nicht auflösen: %s �Kann nicht gleichzeitig die individuelle und die Standard-Gnadenfrist setzen. �Kann Informationen für %s-Quotadatei vom Kernel auf %s nicht setzen: %s �Kann Quota für %s %d vom Kernel auf %s nicht setzen: %s �Kann Signalbehandler nicht setzen: %s �Konnte Socketoptionen nicht setzen: %s �stat()-Aufruf für Gerät %s fehlgeschlagen (vielleicht ein Fehler in der Quotatabelle) �Kann Verzeichnisinformationen nicht abrufen %s: %s �Kann stat() für Mountpunkt %s nicht aufrufen: %s �Kann Informationen über Quotadatei %s nicht abrufen: %s �stat() für Einhängepunkt %s fehlgeschlagen: %s Überspringe... �stat() für Einhängepunkt %s fehlgeschlagen: %s Überspringe... �stat() für eingebundenes Gerät %s fehlgeschlagen: %s �stat() für Einhängepunkt %s fehlgeschlagen: %s �statfs() für %s fehlgeschlagen: %s �Kann %s-Quota-Kontierung nicht abschalten auf %s, wenn Vollstreckung aktiv ist �Kann Quotas auf Gerät %s nicht synchronisieren: %s �Kann Quotas vom Typ %s auf %s nicht deaktivieren: %s Der Kernel wird nichts von quotachecks Änderungen mitbekommen. �Kann Quotas vom Typ %s auf %s nicht aktivieren: %s Der Kernel wird nichts von quotachecks Änderungen mitbekommen. �Kann Quotas via RPC nicht an-/ausschalten. �Kann nicht auf das Mailprogramm warten: %s �Kann Block nicht schreiben (%u): %s �Kann Gnadenfristen nicht in Datei ablegen. �Kann einzelne Gnadenfristen nicht in Datei schreiben. �Kann Quota nicht schreiben (Id %u): %s �Kann Quota für %u auf %s nicht schreiben: %s �Kann Quotainformationen nicht in Datei schreiben. �%d Verzeichnisse und %d Dateien geprüft �Prüfe Kopfinformationen der Quotadateien... �Prüfe Informationen der Quotadatei... �Compiliert mit:%s �Prüfung unter Annahme der Version von der Kommandozeile fortsetzen?�Zerstörte Blöcke: �Ungültige Anzahl verwendeter Einträge (%u)�Konnte keine Werte für %s bekommen. �Erzeugung des %s-Quotaformats wird nicht unterstützt. �Daten ausgegeben. �Zugang verweigert für Rechner %s �Quotaformat %s erkannt �Gerät (%s): Dateisystem ist auf einem nicht unterstützten Gerätetyp eingehängt. Überspringe. �Deaktiviere %s-Quota-Kontierung auf %s �Deaktiviere %s-Quota-Vollstreckung %sauf %s �Datenträgerquotas für %s %s (%cid %d): �Dateisystemquotas für %s %s (%cid %u): %s �Ich weiß nicht, wie das Format %d zwischenzuspeichern ist �Gebe gesammelte Daten für %ss aus. �Doppelte Einträge.�EXT2_IOC_GETFLAGS fehlgeschlagen: %s �Aktiviere XFS-%s-Quota-Kontierung während des Mountens �Aktiviere %s-Quotavollstreckung auf %s �Aktiviere %s-Quota auf dem root-Dateisystem (starten Sie neu, damit diese Änderung wirksam wird) �Vollstreckung der %s-Quota schon aktiv auf %s �Eintrag für Id %u ist abgeschnitten. �Fehler�Fehler bei Prüfung des Gerätenamens: %s �Fehler beim Parsen einer Netlink-Nachricht. �Fehler beim Bearbeiten von Gnadenfristen. �Fehler beim Bearbeiten von Quotas. �Fehler beim Holen von alten Quotastatistiken vom Kernel: %s �Fehler beim Holen von Quotastatistiken vom Kernel: %s �Fehler beim Öffnen der alten Quotadatei %s: %s �Fehler bei Dateifreigabe auf %s �Fehler beim Suchen nach der alten Quotadatei %s: %s �Fehler beim Syncen der Quotas auf Dateisystem %s: %s �Fehler mit %s. �Beende. �Konnte Quota nicht löschen: %s �Konnte TTY von Nutzer %llu nicht finden, um eine Warnung dorthin auszugeben. �Konnte TTY %s von Nutzer %llu nicht öffnen, um eine Warnung auszugeben. �Konnte Gnadenfristendatei nicht parsen. �Konnte Quota-Netlink-Nachricht nicht lesen oder parsen: %s �Konnte IMMUTABLE-Flag in der Quotadatei nicht löschen %s: %s �Konnte Nachricht nicht an DBUS schreiben: Nicht genug Speicher. �Konnte Quotanachricht für Nutzer %llu an %s nicht schreiben: %s �Dateiinformationen abgearbeitet. �Dateilimit erreicht auf�Dateisystem�Dateisystem belegt soft hart Gnadenf. belegt soft hart Gnadenf. �Dateisystem als les- und schreibbar umgemountet. �Dateisystem als nur-lesbar umgemountet �Ersten Eintrag geladen. �Ungültige UUID gefunden: %s �i_num %ld, Blöcke %ld gefunden �Mehrere Strukturen für Id %u gefunden. Verwende Werte: BHARD: %lld BSOFT: %lld IHARD: %lld ISOFT: %lld �Mehrere Strukturen für Id %u gefunden. Werte: BHARD: %lld/%lld BSOFT: %lld/%lld IHARD: %lld/%lld ISOFT: %lld/%lld �Gid-set-Speicheranforderung (ngroups=%d): %s �Going to check %s quota file of %s �Gnadenfrist bevor die weichen Limits durchgesetzt werden für %ss: �Gruppe�Kopfinformationen geprüft. �Kopfinformationen von Datei %s geprüft. Lade Daten... �Hallo, wir haben festgestellt, dass die Gruppe %s, in der Sie Mitglied sind, Quotas dieses Systems überschreitet. Folgende Quotas wurden überschritten: �Hallo, wir haben festgestellt, dass Sie die Quotalimits auf diesem System überschreiten. Wir haben folgende Überschreitungen festgestellt: �Hohe uid festgestellt. �Id %u hat mehrere Strukturen. Benutzereingriff erforderlich (verwende -i für interaktiven Modus oder -n für automatische Antworten). �Ungültige Referenz auf freien Block %u�Illegale Portnummer: %s �Ungültige Referenz (%u >= %u) in %s-Quotadatei auf %s. Quotadatei ist wahrscheinlich defekt. Bitte lassen Sie quotacheck(8) laufen und versuchen Sie es nochmal. �In der Blockgnadenfrist auf�In der Dateignadenfrist auf�Ungültige Formatierungsanweisung für Variable %s. Nicht erkannter Ausdruck %%%c. �Info�Inode: #%llu (%llu Blöcke, %u Extents) �Inode: keines �Füge schon vorhandenen Quotaeintrag ein (Block %u). �Ungültiges Argument "%s" �Kernel Quota Version: %u.%u.%u �Kernel Quota Version: alt �LDAP-Bibliotheksversion >= 2.3 festgestellt. Bitte verwenden Sie LDAP_URI anstelle von Rechnername und Port. Generierte URI %s �Leaving %s �Zeile %d zu lang. �Lade den ersten Quotaeintrag mit Gnadenfristen. �Maximum %u dquots (currently %u incore, %u on freelist) �Vielleicht sollten Sie neue Quotadateien mit quotacheck(8) erzeugen? �Metadata init_io aufgerufen, obwohl Kernel die allgemeine Quotaschnittstelle nicht unterstützt! �Metadata init_io aufgerufen, obwohl Kernelunterstützung dafür nicht aktiviert. �Mountpunkt %s ist kein Verzeichnis?! �Einhängepunkt oder Gerät %s nicht gefunden oder hat keine aktivierten Quotas. �Einhängepunkt nicht angegeben. �Name muss entweder quotaon oder quotaoff sein, aber nicht %s �Name der Quotadatei zu lang. Kontaktiere %s. �Es wurde kein korrekter Einhängepunkt angegeben. �Kein Dateisystem angegeben. �Keine Dateisysteme mit Quotainformationen gefunden. �Kein mögliches Ziel für Nachrichten. Nichts zu tun. �Nicht alle angegebenen Mountpunkte verwenden Quotas. �Nicht genug Speicher. �Keine zerstörten Blöcke gefunden. Gratulation. �Setze Blockgnadenfrist auf %s nicht, denn das weiche Limit ist nicht überschritten. �Setze Inodegnadenfrist auf %s nicht, denn das weiche Limit ist nicht überschritten. �Anzahl an belegten dquot-Datenstrukturen: %ld �Anzahl an dquot-Cachetreffern: %ld �Anzahl an dquot-Löschungen: %ld �Anzahl an dquot-Nachschlagungen: %ld �Anzahl an dquot-Lesevorgängen: %ld �Anzahl an dquot-Schreibvorgängen: %ld �Anzahl freier dquot-Datenstrukturen: %ld �Anzahl verwendeter dquot-Einträge (Benutzer/Gruppen): %ld �Anzahl an Quotadatei-Synchronisierungen: %ld �AUS�AN�Die alte gefundene Datei wurde während der Prüfung entfernt! �Alte Datei nicht gefunden. �Nur das RPC-Quotaformat ist bei NFS-Dateisystemen erlaubt. �Nur das XFS-Quotaformat ist auf XFS-Dateisystemen erlaubt. �Über dem Blockquota auf�Über dem Dateiquota auf�Einlesefehler in Zeile %d. Kann Administratornamen nicht finden. �Einlesefehler in Zeile %d. Kann kein Ende des Gruppennamens finden. �Einlesefehler in Zeile %d. Zusätzliche Zeichen nach dem Administratornamen. �Die Angabe eines Vorlagenamens macht keinen Sinn, wenn Gnadenfrist oder Standard-Gnadenfrist bearbeitet werden soll. �Prototyp macht keinen Sinn beim Bearbeiten von Gnadenfristen. �Quotavollstreckung schon deaktiviert für %s auf %s �Quotadatei %s hat das IMMUTABLE-Flag gesetzt. Lösche es. �Kopfinformationen der Quotadatei %s sind zerstört. Bitte geben sie das Format auf der Kommandozeile an. �Quotadateiformatversion %d stimmt nicht mit der Version überein, die auf der Kommandozeile angegeben wurde (%d). Quotadateikopf könnte inkonsistent sein. �Quotadatei nicht gefunden oder hat falsches Format. �Quotadatei auf %s [%s] existiert nicht oder hat falsches Format. �Quota für %ss ist am Mountpunkt %s aktiviert, dh. quotacheck könnte die Datei beschädigen. �Quota für %ss ist bei Mountpunkte %s aktiviert, dh. quotacheck könnte die Datei beschädigen. Bitte deaktivieren Sie Quotas oder verwenden Sie -f, um die Prüfung zu erzwingen. �Quota für Id %u referenziert aber nicht vorhanden. �Quotaformat wird vom Kernel nicht unterstützt. �Das Dateisystem unterstützt keine Quotas. �Quota-Datenstruktur in Quotadatei für Typ %s nicht vorhanden! Etwas ist wirklich nicht in Ordnung... �Quotastruktur hat Versatz (offset) zu einem anderen Block (%u) als sie sollte (%u). �Quota-Hilfsprogramme Version %s. �Quotaschreiben fehlgeschlagen (Id %u): %s �RPC-Quotaformat nicht mit einkompiliert. �Es wurde das RPC-Quotaformat für ein Nicht-NFS-Dateisystemen angegeben. �Referenz zu ungültigem Block %u�Benenne neue Dateien mit letztendlichen Namen. �Benenne neue Quotadatei um �Benenne alte Quotadatei in %s~ um �Repquota funktioniert nicht über RPC. �Erforderliches Format %s wird nicht vom Kernel unterstützt. �Prüfe %s [%s] �Scanne auf dem Verzeichnisstapel gespeicherte Verzeichnisse �Setze Gnadenfristen und andere Flags auf Standardwerde. Nehme an, daß die Blockanzahl %u beträgt. �Dateigröße: %lu Blöcke: %u Freier Block: %u Block mit freiem Eintrag: %u Flags: %x �Überspringe %s [%s] �Überspringe Zeile. �Etwas seltsames ist beim Scannnen passiert. Fehler %d �Platz�Sowohl -n als auch -t wurden angegeben, aber nur eines von beiden kann verwendet werden. �Angegebener Pfad %s ist weder ein Verzeichnis noch ein Gerät. �Statistik: Gesamtblockzahl: %u Datenblöcke: %u Enträge: %u Durchschnittlich verwendet: %f �%lu Bytes subtrahiert. �Subtrahiere den Platz, den die alte Quotadatei für Quotas vom Typ %s verwendet. �Der laufende Kernel unterstützt kein XFS. �Zeiteinheiten dürfen sein: days, hours, minutes, oder seconds �Gnadenfristen, bis weiche Limits durchgesetzt werden für %s %s (%cid %d): �Zu viele Parameter für den Editor. �Versuche Information in eine nur-lesbare Quotadatei auf %s zu schreiben �Versuche Information in eine nur-lesbare Quotadatei auf %s zu schreiben. �Versuche Quota in eine nur-lesbare Quotadatei auf %s zu schreiben �Kann Namen '%s' in Zeile %d nicht auflösen. �Unerwarteter XFS-Quota-Zielzustand angefordert auf %s �Unbekannte Aktion sollte ausgeführt werden. �Unbekanntes Format einer Netlink-Nachricht vom Kernel! Vielleicht sind Ihre Quota-Tools zu alt? �Unbekannte Option '%c'. �Unbekanntes Quotaformat: %s Unterstützte Formate sind: vfsold - originalas Quotaformat vfsv0 - neues Quotaformat vfsv1 - Quotaformat mit 64-bit-Limits rpc - verwende RPC-Aufrufe xfs - XFS-Quotaformat �Verwendung: %s [Optionen] Optionen sind: -h --help zeigt diesen Text -V --version zeigt Versionsinformationen -F --foreground Startet den Quota-Service im Vordergrund -I --autofs Einhängepunkte vom Automounter nicht ignorieren -p --port <port> Lausche auf gegebenem Port -s --no-setquota Deaktiviert entfernte Aufrufe für setquota (Voreinstellung) -S --setquota Aktivierte entfernte Aufrufe für setquota -x --xtab <path> Daeipfad zu alternativer NFSD-export-Tabelle �Verwendung: %s [Optionen] Optionen sind: -h --help zeigt diesen Text -V --version zeigt Versionsinformationen -F --foreground Startet den Quota-Service im Vordergrund -I --autofs Einhängepunkte vom Automounter nicht ignorieren -p --port <port> Lausche auf gegebenem Port -x --xtab <path> Daeipfad zu alternativer NFSD-export-Tabelle �Verwendung: %s [Optionen] Optionen sind: -h --help Zeigt diesen Text -V --version Zeigt Versionsinformation -C --no-console Versuche, keine Nachrichten auf die Konsole auszugeben -b --print-below Auch Nachrichten auf Konsole ausgeben, wenn weiche oder harte Limits unterschritten werden -D --no-dbus Versuche nicht, Nachrichten an DBUS zu schicken -F --foreground Lasse den Dämon im Vordergrund laufen �Benutzer�Hilfsprogramm zum Prüfen und Reparieren von Quotadateien. %s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a -u, --user Benutzerdateien prüfen -g, --group Gruppendateien prüfen -c, --create-files Neue Quotadateien erzeugen -b, --backup Sicherungskopien alter Quotadateien erzeugen -f, --force Prüfung erzwingen, sogar wenn Quotas aktiviert sind -i, --interactive interaktiver Modus -n, --use-first-dquot Verwende die erste Kopie einer "duplicated structure" -v, --verbose gib mehr Informationen aus -d, --debug gib noch mehr Informationen aus -m, --no-remount Dateisystem nicht als nur-lesbar neu mounten -M, --try-remount Versuche, das Dateisystem als nur-lesbar zu mounten, aber setze fort, wenn das fehlschlägt -R, --exclude-root Das Root-Dateisystem nicht prüfen, wenn alle Dateisysteme geprüft werden -F, --format=formatname Quotadateien eines bestimmten Formats prüfen -a, --all Prüfe alle Dateisysteme -h, --help Zeige diese Nachricht an und beende -V, --version Zeige Versionsinformation und beende �Hilfsprogramm zur Konvertierung von Quota-Dateien. Verwendung: %s [Optionen] Mountpunkt -u, --user Eine Nutzerquotadatei umwandeln -g, --group Eine Gruppenquotadatei umwandel -e, --convert-endian Quotadatei in richtige Bytereihenfolge umwandeln -f, --convert-format oldfmt,newfmt Aus altem Format in das VFSv0-Quotaformat umwandeln -h, --help Diesen Hilfetext anzeigen und beenden -V, --version Versionsinformation ausgeben und beenden �WARNUNG - Quotadatei %s wurde wahrscheinlich abgeschnitten. Kann Quotaeinstellungen nicht retten... �WARNUNG - %s: Kann aktuelle Blockbelegung nicht ändern �WARNUNG - %s: Kann aktuelle Inodebelegung nicht ändern �WARNUNG - Quotadatei %s hat ungültige Kopfinformationen �WARNUNG - Quotadatei %s wurde wahrscheinlich abgeschnitten. Kann Quotaeinstellungen nicht retten... �WARNUNG - Quotadateiinformation wurde zerstört. �WARNUNG - Quotadatei %s wurde wahrscheinlich abgeschnitten. Kann Quotaeinstellungen nicht retten... �WARNUNG - Einige Daten könnten wegen der Zerstörung geändert werden. �Warnung�Warnung: Kann Exporttabelle %s nicht öffnen: %s Verwende '/' als Pseudodateisystemwurzel. �Warnung: Kann EXT2-Flags für %s nicht setzen: %s �Warnung: Ignoriere -%c, wenn eine Dateisystemliste angegeben wurde. �Warnung: Mailprogramm hat sich nicht korrekt beendet. �Warnung: Kein Quotaformat im Kernel festgestellt. �XFS-Quota-Manager dquot-Statistiken �XFS-Quotaformat nur auf XFS-Dateisystemen erlaubt. �Sie müssen die auszuführende Aktion angeben. �Für Konvertierungen müssen Sie das Quell- und das Zielformat angeben. �Ihr Kernel unterstützt wahrscheinlich Journalquotas, aber Sie verwenden sie nicht. Vielleicht sollten Sie auf Journalquotas umsteigen, um nicht mehr quotacheck nach jedem unsauberen Herunterfahren ausführen zu müssen. �Ihre Quotadatei ist in der falschen Bytereihenfolge gespeichert. Bitte konvertieren sie sie mit convertquota(8). �und -kontierung �falsches Format: %s �Blocklimit erreicht�Blockquota überschritten�Blockquota zu lange überschritten�Blöcke�Kann %s auf %s [%s] nicht finden �Kann die Zeiten für %s nicht schreiben. Vielleicht unterstützt der Kernel diese Operation nicht? �copy_user_quota_limits: Benutzerquota für uid %ld holen fehlgeschlagen: %s �copy_user_quota_limits: Benutzerquota für uid %ld setzen fehlgeschlagen: %s �fertig �Fehler (%d) beim Öffnen von %s �Fehler (%d) beim Öffnen des "Inode-Scans" �Fehler (%d) beim Start des Inode-Scans �Fehler beim Holen der Quotas von %s für %s (Id %u): %s �Dateilimit erreicht�Dateiquota überschritten�Dateiquota zu lange überschritten�Dateien�find_free_dqentry(): Datenblock voll, aber er sollte es nicht sein. �Dateisystemname paßt nicht �getgroups(): %s �Blocklimit unterschritten�Blockquota unterschritten�Dateilimit unterschritten�Dateiquota unterschritten�Gnadenfrist�Gruppe %s existiert nicht. �Rechner %s hat versucht, setquota von einem Port >= 1024 aufzurufen �Rechner %s versuchte setquota aufzurufen, während es deaktiviert ist �Limit�kein�aus�an�popd %s Entering directory %s �pushd %s/%s �Quota�quotactl auf %s [%s]: %s �quotactl auf %s: %s �quotactl() auf %s: %s �Setze root_squash auf %s: %s �Platz�svc_run ist zurückgekehrt �Unfähig Argumente freizugeben �Unbekannte Block-Quota-Warnung�nicht festgelegt�Benutzer %s existiert nicht. �verwende %s auf %s [%s]: %s �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/de.po���������������������������������������������������������������������������������0000664�0000000�0000000�00000317070�14463210551�0014156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: quota-tools\n" "Report-Msgid-Bugs-To: jack@suse.cz\n" "POT-Creation-Date: 2022-09-16 13:08+0200\n" "PO-Revision-Date: 2010-02-21 13:10+0100\n" "Last-Translator: Michael Bunk <mb@computer-leipzig.com>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" #: bylabel.c:274 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "Ungültige UUID gefunden: %s\n" #: bylabel.c:294 #, c-format msgid "Error checking device name: %s\n" msgstr "Fehler bei Prüfung des Gerätenamens: %s\n" #: convertquota.c:41 #, c-format msgid "" "Utility for converting quota files.\n" "Usage:\n" "\t%s [options] mountpoint\n" "\n" "-u, --user convert user quota file\n" "-g, --group convert group quota file\n" "-e, --convert-endian convert quota file to correct endianity\n" "-f, --convert-format oldfmt,newfmt convert from old to VFSv0 quota format\n" "-h, --help show this help text and exit\n" "-V, --version output version information and exit\n" "\n" msgstr "" "Hilfsprogramm zur Konvertierung von Quota-Dateien.\n" "Verwendung:\n" "\t%s [Optionen] Mountpunkt\n" "\n" "-u, --user Eine Nutzerquotadatei umwandeln\n" "-g, --group Eine Gruppenquotadatei umwandel\n" "-e, --convert-endian Quotadatei in richtige Bytereihenfolge " "umwandeln\n" "-f, --convert-format oldfmt,newfmt Aus altem Format in das VFSv0-" "Quotaformat umwandeln\n" "-h, --help Diesen Hilfetext anzeigen und beenden\n" "-V, --version Versionsinformation ausgeben und " "beenden\n" "\n" #: convertquota.c:48 warnquota.c:1117 quotacheck.c:314 repquota.c:73 #: common.c:131 #, c-format msgid "Bugs to %s\n" msgstr "Fehler an %s\n" #: convertquota.c:97 msgid "You have to specify source and target format of conversion.\n" msgstr "" "Für Konvertierungen müssen Sie das Quell- und das Zielformat angeben.\n" #: convertquota.c:112 quotacheck.c:400 quotasync.c:88 repquota.c:163 #: quotaon.c:113 setquota.c:264 msgid "Bad number of arguments.\n" msgstr "Falsche Anzahl an Argumenten.\n" #: convertquota.c:119 msgid "You have to specify action to perform.\n" msgstr "Sie müssen die auszuführende Aktion angeben.\n" #: convertquota.c:166 quotacheck_v2.c:241 quotaio_tree.c:58 #, c-format msgid "Cannot read block %u: %s\n" msgstr "Kann Block nicht lesen %u: %s\n" #: convertquota.c:191 convertquota.c:283 #, c-format msgid "Cannot commit dquot for id %u: %s\n" msgstr "Kann dquot für id %u nicht speichern: %s\n" #: convertquota.c:239 msgid "Cannot read header of old quotafile.\n" msgstr "Kann Kopfinformation einer Quotadatei alten Formats nicht lesen.\n" #: convertquota.c:243 msgid "" "Bad file magic or version (probably not quotafile with bad endianity).\n" msgstr "" "Falsche Magische Bytefolge oder Version (wahrscheinlich keine Quotadatei mit " "falscher Bytereihenfolge).\n" #: convertquota.c:254 msgid "Cannot read information about old quotafile.\n" msgstr "Kann Information über Quotadatei im alten Format nicht lesen.\n" #: convertquota.c:296 msgid "Cannot get name of new quotafile.\n" msgstr "Kann Namen der Quotadatei im neuen Format nicht bekommen.\n" #: convertquota.c:302 quotacheck.c:764 #, c-format msgid "Cannot rename new quotafile %s to name %s: %s\n" msgstr "Kann neue Quotadatei %s nicht in %s umbenennen: %s\n" #: convertquota.c:316 #, c-format msgid "Cannot open old format file for %ss on %s\n" msgstr "Kann Quotadatei alten Formats nicht für %ss in %s öffnen\n" #: convertquota.c:321 convertquota.c:354 #, c-format msgid "Cannot create file for %ss for new format on %s: %s\n" msgstr "Kann Datei für %ss im neuen Format auf %s nicht anlegen: %s\n" #: convertquota.c:344 #, c-format msgid "Cannot open old quota file on %s: %s\n" msgstr "Kann Quotadatei im alten Format auf %s nicht öffnen: %s\n" #: convertquota.c:381 msgid "Unknown action should be performed.\n" msgstr "Unbekannte Aktion sollte ausgeführt werden.\n" #: warnquota.c:59 msgid "" "Hi,\n" "\n" "We noticed that you are in violation with the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" "Hallo,\n" "\n" "wir haben festgestellt, dass Sie die Quotalimits auf diesem System\n" "überschreiten. Wir haben folgende Überschreitungen festgestellt:\n" "\n" #: warnquota.c:61 #, c-format msgid "" "\n" "We hope that you will cleanup before your grace period expires.\n" "\n" "Basically, this means that the system thinks you are using more disk space\n" "on the above partition(s) than you are allowed. If you do not delete files\n" "and get below your quota before the grace period expires, the system will\n" "prevent you from creating new files.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" "\n" "Wir hoffen, dass Sie aufräumen bevor die Gnadenfrist abgelaufen ist.\n" "\n" "Sie erhalten diese Mitteilung, weil Sie auf den oben genannten " "Dateisystemen\n" "mehr Speicherplatz belegen bzw. Dateien angelegt haben, als Ihnen erlaubt " "ist.\n" "Wenn Sie keinen Speicherplatz freigeben bzw. Dateien löschen und wieder " "unter\n" "ihr Quota kommen bevor die Gnadenfrist abgelaufen ist, werden Sie keinen\n" "weiteren Speicherplatz belegen bzw. keine weiteren Dateien anlegen können.\n" "\n" "Für Unterstützung wenden Sie sich bitte per E-Mail an %s\n" "oder per Telefon an %s.\n" #: warnquota.c:68 #, c-format msgid "" "Hi,\n" "\n" "We noticed that the group %s you are member of violates the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" "Hallo,\n" "\n" "wir haben festgestellt, dass die Gruppe %s, in der Sie Mitglied sind, Quotas " "dieses Systems\n" "überschreitet. Folgende Quotas wurden überschritten:\n" "\n" #: warnquota.c:70 #, c-format msgid "" "\n" "Please cleanup the group data before the grace period expires.\n" "\n" "Basically, this means that the system thinks group is using more disk space\n" "on the above partition(s) than it is allowed. If you do not delete files\n" "and get below group quota before the grace period expires, the system will\n" "prevent you and other members of the group from creating new files owned by\n" "the group.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" "\n" "Wir hoffen, dass Sie aufräumen bevor die Gnadenfrist abgelaufen ist.\n" "\n" "Sie erhalten diese Mitteilung, weil Sie auf den oben genannten " "Dateisystemen\n" "mehr Speicherplatz belegen bzw. Dateien angelegt haben, als ihnen erlaubt " "ist.\n" "Wenn Sie keinen Speicherplatz freigeben bzw. Dateien löschen und wieder " "unter\n" "ihr Quota kommen bevor die Gnadenfrist abgelaufen ist, werden Sie keinen\n" "weiteren Speicherplatz belegen bzw. keine weiteren Dateien anlegen können.\n" "\n" "Für Unterstützung wenden Sie sich bitte per E-Mail an %s\n" "oder per Telefon an %s.\n" #: warnquota.c:195 #, c-format msgid "Additional error info: %s\n" msgstr "" #: warnquota.c:209 msgid "ldap_initialize() failed" msgstr "" #: warnquota.c:218 msgid "ldap_start_tls_s() failed" msgstr "" #: warnquota.c:224 msgid "ldap_sasl_bind_s() failed" msgstr "" #: warnquota.c:239 #, c-format msgid "Cannot get name for uid/gid %u.\n" msgstr "Kann Namen für uid/gid %u nicht auflösen.\n" #: warnquota.c:323 #, c-format msgid "Cannot create pipe: %s\n" msgstr "Konnte keine Pipe erzeugen: %s\n" #: warnquota.c:329 #, c-format msgid "Cannot fork: %s\n" msgstr "fork() fehlgeschlagen: %s\n" #: warnquota.c:334 #, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "Konnte Dateideskriptor nicht duplizieren: %s\n" #: warnquota.c:338 #, c-format msgid "Cannot execute '%s': %s\n" msgstr "Konnte '%s' nicht ausführen: %s\n" #: warnquota.c:343 #, fuzzy, c-format msgid "Cannot open pipe: %s\n" msgstr "Konnte pine nicht öffnen: %s\n" #: warnquota.c:421 #, fuzzy msgid "Could not setup ldap connection.\n" msgstr "Konnte LDAP-Verbindung nicht herstellen, kehre zurück.\n" #: warnquota.c:438 #, c-format msgid "" "Could not format LDAP search filter for %s user and %s search attribute due " "to excessive length.\n" msgstr "" #: warnquota.c:449 #, c-format msgid "Error with %s.\n" msgstr "Fehler mit %s.\n" #: warnquota.c:450 msgid "ldap_search_ext_s() failed" msgstr "" #: warnquota.c:456 #, fuzzy, c-format msgid "Multiple entries found for client %s (%d).\n" msgstr "" "Mehrere Einträge für Client %s gefunden (nämlich %d). Sende keine Mail.\n" #: warnquota.c:460 #, fuzzy, c-format msgid "Entry not found for client %s.\n" msgstr "" "Eintrag für Client %s nicht gefunden (Gefundene LDAP-Einträge: %d). Sende " "keine Mail.\n" #: warnquota.c:470 #, c-format msgid "Could not get values for %s.\n" msgstr "Konnte keine Werte für %s bekommen.\n" #: warnquota.c:516 #, c-format msgid "Administrator for a group %s not found. Cancelling mail.\n" msgstr "Administrator für Gruppe %s nicht gefunden. Sende keine Mail.\n" #: warnquota.c:568 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" "\n" " Blocklimits Dateilimits\n" #: warnquota.c:569 #, c-format msgid "" "Filesystem used soft hard grace used soft hard grace\n" msgstr "" "Dateisystem belegt soft hart Gnadenf. belegt soft hart " "Gnadenf.\n" #: warnquota.c:609 #, c-format msgid "Cannot wait for mailer: %s\n" msgstr "Kann nicht auf das Mailprogramm warten: %s\n" #: warnquota.c:611 msgid "Warning: Mailer exitted abnormally.\n" msgstr "Warnung: Mailprogramm hat sich nicht korrekt beendet.\n" #: warnquota.c:668 #, c-format msgid "" "Cannot open %s: %s\n" "Will use device names.\n" msgstr "" "Kann %s nicht öffnen: %s\n" "Werde Gerätenamen verwenden.\n" #: warnquota.c:691 #, c-format msgid "Cannot parse line %d in quotatab (missing ':')\n" msgstr "Kann Zeile %d in Quotatabelle nicht verarbeiten (fehlender ':')\n" #: warnquota.c:705 #, c-format msgid "Cannot stat device %s (maybe typo in quotatab)\n" msgstr "" "stat()-Aufruf für Gerät %s fehlgeschlagen (vielleicht ein Fehler in der " "Quotatabelle)\n" #: warnquota.c:725 #, c-format msgid "" "Incorrect format string for variable %s.\n" "Unrecognized expression %%%c.\n" msgstr "" "Ungültige Formatierungsanweisung für Variable %s.\n" "Nicht erkannter Ausdruck %%%c.\n" #: warnquota.c:739 msgid "Ignoring error in config file.\n" msgstr "" #: warnquota.c:741 msgid "" "Aborting. Use option -I if you want warnquota to ignore errors in the config " "file as it used to in older versions.\n" msgstr "" #: warnquota.c:786 #, c-format msgid "Cannot open %s: %s\n" msgstr "Kann %s nicht öffnen: %s\n" #: warnquota.c:808 #, c-format msgid "line %d: Line too long! Maximum is %d.\n" msgstr "" #: warnquota.c:881 #, c-format msgid "Cannot parse time at CC_BEFORE variable (line %d).\n" msgstr "Kann die Zeit bei CC_BEFORE-Variable nicht verarbeiten (Zeile %d).\n" #: warnquota.c:941 #, c-format msgid "" "line %d: LDAP variable in config file but LDAP support is not compiled.\n" msgstr "" #: warnquota.c:949 #, c-format msgid "line %d: Unknown variable %s in config file.\n" msgstr "" #: warnquota.c:957 #, c-format msgid "line %d: Missing '=' in config file.\n" msgstr "" #: warnquota.c:964 #, fuzzy, c-format msgid "line %d: Unterminated last line.\n" msgstr "Fehlendes Zeilendendezeichen in der letzten Zeile. Ignoriere.\n" #: warnquota.c:975 #, c-format msgid "Could not format LDAP URI because it's longer than %d bytes.\n" msgstr "" #: warnquota.c:980 #, c-format msgid "" "LDAP library version >= 2.3 detected. Please use LDAP_URI instead of " "hostname and port.\n" "Generated URI %s\n" msgstr "" "LDAP-Bibliotheksversion >= 2.3 festgestellt. Bitte verwenden Sie LDAP_URI " "anstelle von Rechnername und Port.\n" "Generierte URI %s\n" #: warnquota.c:1002 #, c-format msgid "Cannot open file with group administrators: %s\n" msgstr "Kann Datei der Gruppenadministratoren nicht öffnen: %s\n" #: warnquota.c:1017 #, c-format msgid "Parse error at line %d. Cannot find end of group name.\n" msgstr "Einlesefehler in Zeile %d. Kann kein Ende des Gruppennamens finden.\n" #: warnquota.c:1026 #, c-format msgid "Parse error at line %d. Cannot find administrators name.\n" msgstr "Einlesefehler in Zeile %d. Kann Administratornamen nicht finden.\n" #: warnquota.c:1036 #, c-format msgid "" "Parse error at line %d. Trailing characters after administrators name.\n" msgstr "" "Einlesefehler in Zeile %d. Zusätzliche Zeichen nach dem " "Administratornamen.\n" #: warnquota.c:1099 #, fuzzy msgid "" "Usage:\n" " warnquota [-ugsid] [-F quotaformat] [-c configfile] [-q quotatabfile] [-a " "adminsfile] [filesystem...]\n" "\n" "-u, --user warn users\n" "-g, --group warn groups\n" "-s, --human-readable[=units] display numbers in human friendly units " "(MB,\n" " GB, ...). Units can be also specified\n" " explicitely by an optional argument in " "format\n" " [kgt],[kgt] where the first character " "specifies\n" " space units and the second character " "specifies\n" " inode units\n" "-i, --no-autofs avoid autofs mountpoints\n" "-d, --no-details do not send quota information itself\n" "-F, --format=formatname use quotafiles of specific format\n" "-c, --config=config-file non-default config file\n" "-q, --quota-tab=quotatab-file non-default quotatab\n" "-a, --admins-file=admins-file non-default admins file\n" "-I, --ignore-config-errors\tignore unknown statements in config file\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "Verwendung:\n" " warnquota [-ugsid] [-F Quotaformat] [-c Konfigurationsdatei] [-q " "Quotatabelle] [-a Admindatei]\n" "\n" "-u, --user Benutzer warnen\n" "-g, --group Gruppen warnen\n" "-s, --human-readable Angaben in menschenfreundlicheren Einheiten " "senden\n" "-i, --no-autofs Vermeide Autofs-Einhängepunkte\n" "-d, --no-details Sende keine detaillierten " "Quotainformationen\n" "-F, --format=Quotaformat Verwende Quotadateien eines bestimmten " "Formats\n" "-c, --config=Konfigurationsdatein Nichtstandard-Konfigurationsdatei\n" "-q, --quota-tab=Quotatabelle Nichtstandard-Quotatabellendatei\n" "-a, --admins-file=Admindatei Nichtstandard-Gruppenadministratorendatei\n" "-h, --help Hilfe anzeigen und beenden\n" "-v, --version Versionsinformationen anzeigen und beenden\n" "\n" #: warnquota.c:1174 repquota.c:134 quota.c:350 #, c-format msgid "Bad output format units for human readable output: %s\n" msgstr "" #: warnquota.c:1194 #, c-format msgid "Cannot get host name: %s\n" msgstr "Kann Rechnernamen nicht bekommen: %s\n" #: quotacheck.c:92 msgid "Not enough memory.\n" msgstr "Nicht genug Speicher.\n" #: quotacheck.c:124 #, fuzzy, c-format msgid "Adding hardlink for inode %llu\n" msgstr "Füge Hardlink für I-Node %llu hinzu\n" #: quotacheck.c:167 #, c-format msgid "Adding dquot structure type %s for %d\n" msgstr "Füge dquot-Strukturtyp %s für %d hinzu\n" #: quotacheck.c:253 #, c-format msgid "Cannot open file %s: %s\n" msgstr "Kann Datei nicht öffnen %s: %s\n" #: quotacheck.c:258 msgid "Cannot get exact used space... Results might be inaccurate.\n" msgstr "" "Kann genau verwendeten Platz nicht bestimmen... Die Ergebnisse können " "ungenau sein.\n" #: quotacheck.c:296 #, c-format msgid "" "Utility for checking and repairing quota files.\n" "%s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a\n" "\n" "-u, --user check user files\n" "-g, --group check group files\n" "-c, --create-files create new quota files\n" "-b, --backup create backups of old quota files\n" "-f, --force force check even if quotas are enabled\n" "-i, --interactive interactive mode\n" "-n, --use-first-dquot use the first copy of duplicated structure\n" "-v, --verbose print more information\n" "-d, --debug print even more messages\n" "-m, --no-remount do not remount filesystem read-only\n" "-M, --try-remount try remounting filesystem read-only,\n" " continue even if it fails\n" "-R, --exclude-root exclude root when checking all filesystems\n" "-F, --format=formatname check quota files of specific format\n" "-a, --all check all filesystems\n" "-h, --help display this message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "Hilfsprogramm zum Prüfen und Reparieren von Quotadateien.\n" "%s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a\n" "\n" "-u, --user Benutzerdateien prüfen\n" "-g, --group Gruppendateien prüfen\n" "-c, --create-files Neue Quotadateien erzeugen\n" "-b, --backup Sicherungskopien alter Quotadateien erzeugen\n" "-f, --force Prüfung erzwingen, sogar wenn Quotas aktiviert " "sind\n" "-i, --interactive interaktiver Modus\n" "-n, --use-first-dquot Verwende die erste Kopie einer \"duplicated " "structure\"\n" "-v, --verbose gib mehr Informationen aus\n" "-d, --debug gib noch mehr Informationen aus\n" "-m, --no-remount Dateisystem nicht als nur-lesbar neu mounten\n" "-M, --try-remount Versuche, das Dateisystem als nur-lesbar zu " "mounten,\n" " aber setze fort, wenn das fehlschlägt\n" "-R, --exclude-root Das Root-Dateisystem nicht prüfen, wenn alle " "Dateisysteme geprüft werden\n" "-F, --format=formatname Quotadateien eines bestimmten Formats prüfen\n" "-a, --all Prüfe alle Dateisysteme\n" "-h, --help Zeige diese Nachricht an und beende\n" "-V, --version Zeige Versionsinformation und beende\n" "\n" #: quotacheck.c:427 #, c-format msgid "error (%d) while opening %s\n" msgstr "Fehler (%d) beim Öffnen von %s\n" #: quotacheck.c:432 #, fuzzy, c-format msgid "error (%d) while allocating file inode bitmap\n" msgstr "Fehler (%d) bei Speicherreservierung für I-Node-Datei-Bittabelle\n" #: quotacheck.c:437 #, fuzzy, c-format msgid "errstr (%d) while allocating directory inode bitmap\n" msgstr "Fehler (%d) bei Speicheranforderung für Inode-Verzeichnis-Bitmap\n" #: quotacheck.c:442 #, c-format msgid "error (%d) while opening inode scan\n" msgstr "Fehler (%d) beim Öffnen des \"Inode-Scans\"\n" #: quotacheck.c:447 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "Fehler (%d) beim Start des Inode-Scans\n" #: quotacheck.c:455 #, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "i_num %ld, Blöcke %ld gefunden\n" #: quotacheck.c:461 msgid "High uid detected.\n" msgstr "Hohe uid festgestellt.\n" #: quotacheck.c:477 #, c-format msgid "Something weird happened while scanning. Error %d\n" msgstr "Etwas seltsames ist beim Scannnen passiert. Fehler %d\n" #: quotacheck.c:510 #, c-format msgid "Cannot stat directory %s: %s\n" msgstr "Kann Verzeichnisinformationen nicht abrufen %s: %s\n" #: quotacheck.c:522 #, fuzzy, c-format msgid "Cannot chdir to %s: %s\n" msgstr "Kann Verzeichnisinformationen nicht abrufen %s: %s\n" #: quotacheck.c:527 #, fuzzy, c-format msgid "" "\n" "Cannot open directory %s: %s\n" msgstr "" "\n" "Kann Verzeichnis öffnen %s: %s\n" #: quotacheck.c:539 #, fuzzy, c-format msgid "" "lstat: Cannot stat `%s/%s': %s\n" "Guess you'd better run fsck first !\n" "exiting...\n" msgstr "" "lstat kann kein stat `%s/%s': %s\n" "Ich denke, du solltest besser erst fsck laufen lassen !\n" "Beende...\n" #: quotacheck.c:551 #, c-format msgid "pushd %s/%s\n" msgstr "pushd %s/%s\n" #: quotacheck.c:567 #, c-format msgid "\tAdding %s size %lld ino %d links %d uid %u gid %u\n" msgstr "\tAdding %s size %lld ino %d links %d uid %u gid %u\n" #: quotacheck.c:577 msgid "Scanning stored directories from directory stack\n" msgstr "Scanne auf dem Verzeichnisstapel gespeicherte Verzeichnisse\n" #: quotacheck.c:581 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" "popd %s\n" "Entering directory %s\n" #: quotacheck.c:593 #, c-format msgid "Leaving %s\n" msgstr "Leaving %s\n" #: quotacheck.c:633 #, c-format msgid "Going to check %s quota file of %s\n" msgstr "Going to check %s quota file of %s\n" #: quotacheck.c:639 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" msgstr "" "Quota für %ss ist am Mountpunkt %s aktiviert, dh. quotacheck könnte die " "Datei beschädigen.\n" #: quotacheck.c:640 quotacheck.c:966 #, fuzzy msgid "Should I continue?" msgstr "Soll ich fortsetzten" #: quotacheck.c:641 quotacheck.c:967 #, c-format msgid "As you wish... Canceling check of this file.\n" msgstr "WIe du wünschst... breche Prüfung dieser Datei ab.\n" #: quotacheck.c:646 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" "Please turn quotas off or use -f to force checking.\n" msgstr "" "Quota für %ss ist bei Mountpunkte %s aktiviert, dh. quotacheck könnte die " "Datei beschädigen.\n" "Bitte deaktivieren Sie Quotas oder verwenden Sie -f, um die Prüfung zu " "erzwingen.\n" #: quotacheck.c:653 #, c-format msgid "Error while syncing quotas on %s: %s\n" msgstr "Fehler beim Syncen der Quotas auf Dateisystem %s: %s\n" #: quotacheck.c:658 #, c-format msgid "Cannot get quotafile name for %s\n" msgstr "Kann Quotadateinamen für %s nicht erhalten\n" #: quotacheck.c:663 quotaio.c:151 quotasys.c:844 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "Kann Quotadatei nicht öffnen %s: %s\n" #: quotacheck.c:702 msgid "Renaming new files to proper names.\n" msgstr "Benenne neue Dateien mit letztendlichen Namen.\n" #: quotacheck.c:704 #, c-format msgid "Cannot get name of old quotafile on %s.\n" msgstr "Kann Namen der alten Quotadatei auf Dateisystem %s nicht bekommen.\n" #: quotacheck.c:707 msgid "Old file not found.\n" msgstr "Alte Datei nicht gefunden.\n" #: quotacheck.c:710 #, c-format msgid "Error while searching for old quota file %s: %s\n" msgstr "Fehler beim Suchen nach der alten Quotadatei %s: %s\n" #: quotacheck.c:719 msgid "Old file found removed during check!\n" msgstr "Die alte gefundene Datei wurde während der Prüfung entfernt!\n" #: quotacheck.c:722 #, c-format msgid "Error while opening old quota file %s: %s\n" msgstr "Fehler beim Öffnen der alten Quotadatei %s: %s\n" #: quotacheck.c:728 #, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "EXT2_IOC_GETFLAGS fehlgeschlagen: %s\n" #: quotacheck.c:732 #, c-format msgid "Quota file %s has IMMUTABLE flag set. Clearing.\n" msgstr "Quotadatei %s hat das IMMUTABLE-Flag gesetzt. Lösche es.\n" #: quotacheck.c:735 #, c-format msgid "Failed to remove IMMUTABLE flag from quota file %s: %s\n" msgstr "Konnte IMMUTABLE-Flag in der Quotadatei nicht löschen %s: %s\n" #: quotacheck.c:744 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "Benenne alte Quotadatei in %s~ um\n" #: quotacheck.c:750 #, c-format msgid "Name of quota file too long. Contact %s.\n" msgstr "Name der Quotadatei zu lang. Kontaktiere %s.\n" #: quotacheck.c:752 #, c-format msgid "Cannot rename old quotafile %s to %s: %s\n" msgstr "Kann alte Quotadatei %s nicht in %s umbenennen: %s\n" #: quotacheck.c:758 msgid "Renaming new quotafile\n" msgstr "Benenne neue Quotadatei um\n" #: quotacheck.c:770 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "Kann Zugriffsrechte von %s nicht ändern: %s\n" #: quotacheck.c:777 #, c-format msgid "Cannot open new quota file %s: %s\n" msgstr "Kann neue Quotadatei %s nicht öffnen: %s\n" #: quotacheck.c:782 #, c-format msgid "Warning: Cannot set EXT2 flags on %s: %s\n" msgstr "Warnung: Kann EXT2-Flags für %s nicht setzen: %s\n" #: quotacheck.c:802 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "Gebe gesammelte Daten für %ss aus.\n" #: quotacheck.c:805 #, fuzzy, c-format msgid "Cannot initialize IO on xfs/gfs2 quotafile: %s\n" msgstr "Kann IO für neue Quotadatei nicht initialisieren: %s\n" #: quotacheck.c:811 #, c-format msgid "Cannot initialize IO on new quotafile: %s\n" msgstr "Kann IO für neue Quotadatei nicht initialisieren: %s\n" #: quotacheck.c:838 #, c-format msgid "Cannot finish IO on new quotafile: %s\n" msgstr "Kann IO an neuer Quotadatei nicht beenden: %s\n" #: quotacheck.c:841 msgid "Data dumped.\n" msgstr "Daten ausgegeben.\n" #: quotacheck.c:849 #, c-format msgid "Cannot find checked quota file for %ss on %s!\n" msgstr "Kann geprüfte Quotadatei für %ss auf %s nicht finden!\n" #: quotacheck.c:853 #, c-format msgid "" "Cannot turn %s quotas off on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" "Kann Quotas vom Typ %s auf %s nicht deaktivieren: %s\n" "Der Kernel wird nichts von quotachecks Änderungen mitbekommen.\n" #: quotacheck.c:866 #, c-format msgid "" "Cannot turn %s quotas on on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" "Kann Quotas vom Typ %s auf %s nicht aktivieren: %s\n" "Der Kernel wird nichts von quotachecks Änderungen mitbekommen.\n" #: quotacheck.c:892 #, c-format msgid "Substracting space used by old %s quota file.\n" msgstr "" "Subtrahiere den Platz, den die alte Quotadatei für Quotas vom Typ %s " "verwendet.\n" #: quotacheck.c:894 #, fuzzy, c-format msgid "" "Old %s file name could not been determined. Usage will not be subtracted.\n" msgstr "" "Alte Quotadatei für Quotas vom Typ %s nicht gefunden. Verwendung wird nicht " "subtrahiert werden.\n" #: quotacheck.c:899 #, fuzzy, c-format msgid "Cannot stat old %s quota file %s: %s. Usage will not be subtracted.\n" msgstr "" "Alte Quotadatei für Quotas vom Typ %s nicht gefunden. Verwendung wird nicht " "subtrahiert werden.\n" #: quotacheck.c:911 #, c-format msgid "" "Quota structure for %s owning quota file not present! Something is really " "wrong...\n" msgstr "" "Quota-Datenstruktur in Quotadatei für Typ %s nicht vorhanden! Etwas ist " "wirklich nicht in Ordnung...\n" #: quotacheck.c:916 #, c-format msgid "Substracted %lu bytes.\n" msgstr "%lu Bytes subtrahiert.\n" #: quotacheck.c:930 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "Kann stat() für Mountpunkt %s nicht aufrufen: %s\n" #: quotacheck.c:932 #, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "Mountpunkt %s ist kein Verzeichnis?!\n" #: quotacheck.c:965 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only. Counted values might not " "be right.\n" msgstr "" "Kann das Dateisystem auf %s nicht als nur-lesbar ummounten. Gezählte Werte " "könnten falsch sein.\n" #: quotacheck.c:973 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only so counted values might " "not be right.\n" "Please stop all programs writing to filesystem or use -m flag to force " "checking.\n" msgstr "" "Kann das Dateisystem auf %s nicht als nur-lesbar ummounten. Gezählte Werte " "könnten falsch sein.\n" "Bitte beenden Sie alle Programme, die auf das Dateisystem schreiben oder " "verwenden Sie -m, um die Prüfung zu erzwingen.\n" #: quotacheck.c:981 msgid "Filesystem remounted read-only\n" msgstr "Dateisystem als nur-lesbar umgemountet\n" #: quotacheck.c:984 #, c-format msgid "Scanning %s [%s] " msgstr "Prüfe %s [%s] " #: quotacheck.c:1010 msgid "done\n" msgstr "fertig\n" #: quotacheck.c:1019 #, c-format msgid "Checked %d directories and %d files\n" msgstr "%d Verzeichnisse und %d Dateien geprüft\n" #: quotacheck.c:1023 #, c-format msgid "" "Cannot remount filesystem %s read-write. cannot write new quota files.\n" msgstr "" "Kann Dateisystem %s nicht als les- und schreibbar ummounten. Kann neue " "Quotadateien nicht schreiben.\n" #: quotacheck.c:1024 msgid "Filesystem remounted RW.\n" msgstr "Dateisystem als les- und schreibbar umgemountet.\n" #: quotacheck.c:1068 #, c-format msgid "Cannot find quota option on filesystem %s with quotas!\n" msgstr "Kann die Quotaoption auf dem Dateisystem %s mit Quotas nicht finden!\n" #: quotacheck.c:1074 #, c-format msgid "Cannot detect quota format for journalled quota on %s\n" msgstr "Kann das Quotaformat für das Journalquota auf %s nicht feststellen\n" #: quotacheck.c:1140 quotasys.c:1610 #, c-format msgid "Cannot get system info: %s\n" msgstr "Kann Syseminformationen nicht abrufen: %s\n" #: quotacheck.c:1171 quotasys.c:934 msgid "Cannot initialize mountpoint scan.\n" msgstr "Kann die Mountpunkt-Prüfung nicht initialisieren.\n" #: quotacheck.c:1176 #, c-format msgid "Skipping %s [%s]\n" msgstr "Überspringe %s [%s]\n" #: quotacheck.c:1193 #, c-format msgid "" "Cannot guess format from filename on %s. Please specify format on " "commandline.\n" msgstr "" "Kann das Format nicht aus dem Dateinamen auf Dateisystem %s ableiten. Bitte " "geben Sie das Format auf der Kommandozeile an.\n" #: quotacheck.c:1198 #, c-format msgid "Detected quota format %s\n" msgstr "Quotaformat %s erkannt\n" #: quotacheck.c:1205 quotaon.c:276 msgid "" "Your kernel probably supports ext4 quota feature but you are using external " "quota files. Please switch your filesystem to use ext4 quota feature as " "external quota files on ext4 are deprecated. You can enable the feature by " "unmounting the file system and running 'tune2fs -O quota <device>'.\n" msgstr "" #: quotacheck.c:1223 msgid "" "Your kernel probably supports journaled quota but you are not using it. " "Consider switching to journaled quota to avoid running quotacheck after an " "unclean shutdown.\n" msgstr "" "Ihr Kernel unterstützt wahrscheinlich Journalquotas, aber Sie verwenden sie " "nicht. Vielleicht sollten Sie auf Journalquotas umsteigen, um nicht mehr " "quotacheck nach jedem unsauberen Herunterfahren ausführen zu müssen.\n" #: quotacheck.c:1236 msgid "" "Cannot find filesystem to check or filesystem not mounted with quota " "option.\n" msgstr "" "Kann kein Dateisystem zum Prüfen finden oder Dateisystem nicht mit der Quota-" "Option gemountet.\n" #: quotacheck.c:1254 #, c-format msgid "" "Allocated %d bytes memory\n" "Free'd %d bytes\n" "Lost %d bytes\n" msgstr "" "%d Bytes Speicher belegt\n" "%d Bytes freigegeben\n" "%d Bytes verloren\n" #: quotasync.c:29 #, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ugP] mount-point...\n" " or: %1$s [-ugP] -a\n" " or: %1$s -h | -V\n" "\n" msgstr "" #: quotasync.c:36 #, fuzzy, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group quotas\n" "-P, --project synchronize project quotas\n" "-a, --all synchronize quotas for all mounted file systems\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "-t, --edit-period Bearbeite Standard-Gnadenfrist\n" "-T, --edit-times Bearbeite Gnadenfristen für Benutzer/Gruppe\n" "-h, --help Zeige diese Hilfe und beende\n" "-V, --version Zeige Versionsinformationen und beende\n" "\n" #: quotasync.c:45 #, fuzzy, c-format msgid "Report bugs to <%s>.\n" msgstr "Fehler an %s\n" #: quotasync.c:113 #, fuzzy, c-format msgid "%s quota sync failed: %s\n" msgstr "%s-Quota auf %s (%s) ist %s\n" #: quotasync.c:126 #, fuzzy, c-format msgid "%s quota sync failed for %s: %s\n" msgstr "quotactl auf %s: %s\n" #: quota.h:22 msgid "user" msgstr "" #: quota.h:23 #, fuzzy msgid "group" msgstr "Gruppe" #: quota.h:24 msgid "project" msgstr "" #: quota.h:25 msgid "undefined" msgstr "" #: quota_nld.c:85 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -C --no-console do not try to write messages to console\n" " -b --print-below write to console also information about getting below " "hard/soft limits\n" " -D --no-dbus do not try to write messages to DBUS\n" " -F --foreground run daemon in foreground\n" msgstr "" "Verwendung: %s [Optionen]\n" "Optionen sind:\n" " -h --help Zeigt diesen Text\n" " -V --version Zeigt Versionsinformation\n" " -C --no-console Versuche, keine Nachrichten auf die Konsole auszugeben\n" " -b --print-below Auch Nachrichten auf Konsole ausgeben, wenn weiche oder " "harte Limits unterschritten werden\n" " -D --no-dbus Versuche nicht, Nachrichten an DBUS zu schicken\n" " -F --foreground Lasse den Dämon im Vordergrund laufen\n" #: quota_nld.c:119 rquota_svc.c:158 #, c-format msgid "Unknown option '%c'.\n" msgstr "Unbekannte Option '%c'.\n" #: quota_nld.c:125 msgid "No possible destination for messages. Nothing to do.\n" msgstr "Kein mögliches Ziel für Nachrichten. Nichts zu tun.\n" #: quota_nld.c:151 msgid "Error parsing netlink message.\n" msgstr "Fehler beim Parsen einer Netlink-Nachricht.\n" #: quota_nld.c:158 msgid "" "Unknown format of kernel netlink message!\n" "Maybe your quota tools are too old?\n" msgstr "" "Unbekanntes Format einer Netlink-Nachricht vom Kernel!\n" "Vielleicht sind Ihre Quota-Tools zu alt?\n" #: quota_nld.c:182 #, fuzzy msgid "Cannot allocate netlink socket!\n" msgstr "Kann keinen Speicher für ein Netlink-Handle reservieren!\n" #: quota_nld.c:188 #, c-format msgid "Cannot register callback for netlink messages: %s\n" msgstr "Kann Callbackfunktion für Netlink-Nachrichten nicht registrieren: %s\n" #: quota_nld.c:193 #, c-format msgid "Cannot connect to netlink socket: %s\n" msgstr "Kann nicht zum Netlink-Socket verbinden: %s\n" #: quota_nld.c:205 #, c-format msgid "Cannot resolve quota netlink name: %s\n" msgstr "Kann Quota-Netlink-Namen nicht auflösen: %s\n" #: quota_nld.c:211 #, c-format msgid "Cannot join quota multicast group: %s\n" msgstr "Kann mich Quota-Muticast-Gruppe nicht anschließen: %s\n" #: quota_nld.c:224 #, c-format msgid "Cannot connect to system DBUS: %s\n" msgstr "Kann nicht zum System-DBUS verbinden: %s\n" #: quota_nld.c:292 #, c-format msgid "Failed to find tty of user %llu to report warning to.\n" msgstr "" "Konnte TTY von Nutzer %llu nicht finden, um eine Warnung dorthin " "auszugeben.\n" #: quota_nld.c:297 #, c-format msgid "Failed to open tty %s of user %llu to report warning.\n" msgstr "" "Konnte TTY %s von Nutzer %llu nicht öffnen, um eine Warnung auszugeben.\n" #: quota_nld.c:303 msgid "Warning" msgstr "Warnung" #: quota_nld.c:306 msgid "Error" msgstr "Fehler" #: quota_nld.c:308 msgid "Info" msgstr "Info" #: quota_nld.c:311 msgid "file limit reached" msgstr "Dateilimit erreicht" #: quota_nld.c:314 msgid "file quota exceeded too long" msgstr "Dateiquota zu lange überschritten" #: quota_nld.c:317 msgid "file quota exceeded" msgstr "Dateiquota überschritten" #: quota_nld.c:320 msgid "block limit reached" msgstr "Blocklimit erreicht" #: quota_nld.c:323 msgid "block quota exceeded too long" msgstr "Blockquota zu lange überschritten" #: quota_nld.c:326 msgid "block quota exceeded" msgstr "Blockquota überschritten" #: quota_nld.c:329 msgid "got below file limit" msgstr "Dateilimit unterschritten" #: quota_nld.c:332 msgid "got below file quota" msgstr "Dateiquota unterschritten" #: quota_nld.c:335 msgid "got below block limit" msgstr "Blocklimit unterschritten" #: quota_nld.c:338 msgid "got below block quota" msgstr "Blockquota unterschritten" #: quota_nld.c:341 msgid "unknown quota warning" msgstr "Unbekannte Block-Quota-Warnung" #: quota_nld.c:345 #, c-format msgid "Failed to write quota message for user %llu to %s: %s\n" msgstr "Konnte Quotanachricht für Nutzer %llu an %s nicht schreiben: %s\n" #: quota_nld.c:358 msgid "Cannot create DBUS message: No enough memory.\n" msgstr "Kann DBUS-Nachricht nicht erzeugen: Nicht genug Speicher.\n" #: quota_nld.c:376 msgid "Failed to write message to dbus: No enough memory.\n" msgstr "Konnte Nachricht nicht an DBUS schreiben: Nicht genug Speicher.\n" #: quota_nld.c:392 #, c-format msgid "Failed to read or parse quota netlink message: %s\n" msgstr "Konnte Quota-Netlink-Nachricht nicht lesen oder parsen: %s\n" #: quota_nld.c:403 msgid "Undefined program name.\n" msgstr "" #: quota_nld.c:408 #, fuzzy msgid "Not enough memory to build PID file name.\n" msgstr "Nicht genug Speicher.\n" #: quota_nld.c:427 #, fuzzy, c-format msgid "Could not open PID file '%s': %s\n" msgstr "Kann Datei nicht öffnen %s: %s\n" #: quota_nld.c:433 #, fuzzy, c-format msgid "Could not write daemon's PID into '%s'.\n" msgstr "Konnte keine Werte für %s bekommen.\n" #: quota_nld.c:440 #, fuzzy, c-format msgid "Could not close PID file '%s'.\n" msgstr "Konnte keine Werte für %s bekommen.\n" #: quota_nld.c:470 msgid "Could not register PID file removal on SIGTERM.\n" msgstr "" #: quota_nld.c:472 #, c-format msgid "Could not store my PID %jd.\n" msgstr "" #: quota_nld.c:489 rquota_svc.c:537 #, fuzzy, c-format msgid "Failed to daemonize: %s\n" msgstr "Konnte Quota nicht löschen: %s\n" #: repquota.c:51 #, fuzzy, c-format msgid "" "Utility for reporting quotas.\n" "Usage:\n" "%s [-vugsi] [-c|C] [-t|n] [-F quotaformat] [-O (default | xml | csv)] (-a | " "mntpoint)\n" "\n" "-v, --verbose display also users/groups without any usage\n" "-u, --user display information about users\n" "-g, --group display information about groups\n" "-P, --project display information about projects\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" "-t, --truncate-names truncate names to 9 characters\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-n, --no-names do not translate uid/gid to name\n" "-i, --no-autofs avoid autofs mountpoints\n" "-c, --cache translate big number of ids at once\n" "-C, --no-cache translate ids one by one\n" "-F, --format=formatname report information for specific format\n" "-O, --output=format format output as xml or csv\n" "-a, --all report information for all mount points with\n" " quotas\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "Werkzeug zum Berichten von Quotas.\n" "Verwendung:\n" "%s [-vugsi] [-c|C] [-t|n] [-F quotaformat] (-a | mntpoint)\n" "\n" "-v, --verbose Zeige auch Benutzer/Gruppen ohne " "Quotaverwendung\n" "-u, --user Zeige Informationen über Benutzer\n" "-g, --group Zeige Informationen über Gruppen\n" "-s, --human-readable Zeige Zahlen in menschenfreundlichen Einheiten " "(MB, GB, ...)\n" "-t, --truncate-names Beschneide Namen auf 8 Zeichen\n" "-p, --raw-grace Zeige Gnadenfrist in Sekunden seit Beginn der " "UNIX-Epoche\n" "-n, --no-names Keine Übersetzung von Uids/Gids zu Namen\n" "-i, --no-autofs Vermeide autofs-Einhängepunkte\n" "-c, --batch-translation Übersetze große Mengen an Ids auf einmal\n" "-C, --no-batch-translation Übersetze Ids einzeln\n" "-F, --format=formatname Berichte Informationen für ein bestimmtes " "Format\n" "-h, --help Zeige diese Hilfenachnicht und beende\n" "-V, --version Zeige Versionsinformation und beende\n" "\n" #: repquota.c:167 msgid "Repquota cannot report through RPC calls.\n" msgstr "Repquota funktioniert nicht über RPC.\n" #: repquota.c:171 msgid "Specified both -n and -t but only one of them can be used.\n" msgstr "" "Sowohl -n als auch -t wurden angegeben, aber nur eines von beiden kann " "verwendet werden.\n" #: repquota.c:375 msgid "User" msgstr "Benutzer" #: repquota.c:377 msgid "Group" msgstr "Gruppe" #: repquota.c:379 msgid "Project" msgstr "" #: repquota.c:382 #, c-format msgid "*** Report for %s quotas on device %s\n" msgstr "*** Report für %s Quotas auf Gerät %s\n" #: repquota.c:391 msgid "Space" msgstr "Platz" #: repquota.c:393 msgid "Block" msgstr "Block" #: repquota.c:394 #, c-format msgid "Block grace time: %s; Inode grace time: %s\n" msgstr "Blockgnadenfrist: %s; Inodegnadenfrist: %s\n" #: repquota.c:395 #, c-format msgid " %s limits File limits\n" msgstr " %s Limits Dateilimits\n" #: repquota.c:396 #, c-format msgid "%-9s used soft hard grace used soft hard grace\n" msgstr "%-9s belegt weich hart Gnade belegt weich hart Gnade\n" #: quotacheck_v1.c:32 #, c-format msgid "Cannot read entry for id %u from quotafile %s: %s\n" msgstr "Kann Eintrag für Id %u aus Quotadatei %s nicht lesen: %s\n" #: quotacheck_v1.c:35 #, c-format msgid "Entry for id %u is truncated.\n" msgstr "Eintrag für Id %u ist abgeschnitten.\n" #: quotacheck_v1.c:64 msgid "Loading first quota entry with grace times.\n" msgstr "Lade den ersten Quotaeintrag mit Gnadenfristen.\n" #: quotacheck_v1.c:68 #, c-format msgid "Cannot read first entry from quotafile %s: %s\n" msgstr "Kann ersten Eintrag aus der Quotadatei %s nicht lesen: %s\n" #: quotacheck_v1.c:72 #, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "WARNUNG - Quotadatei %s wurde wahrscheinlich abgeschnitten. Kann " "Quotaeinstellungen nicht retten...\n" #: quotacheck_v1.c:78 msgid "First entry loaded.\n" msgstr "Ersten Eintrag geladen.\n" #: quotacheck_v2.c:55 msgid "Checking quotafile info...\n" msgstr "Prüfe Informationen der Quotadatei...\n" #: quotacheck_v2.c:60 #, c-format msgid "Cannot read info from quota file %s: %s\n" msgstr "Kann Information nicht aus Quotadatei %s lesen: %s\n" #: quotacheck_v2.c:65 #, c-format msgid "" "WARNING - Quota file %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "WARNUNG - Quotadatei %s wurde wahrscheinlich abgeschnitten. Kann " "Quotaeinstellungen nicht retten...\n" #: quotacheck_v2.c:77 msgid "WARNING - Quota file info was corrupted.\n" msgstr "WARNUNG - Quotadateiinformation wurde zerstört.\n" #: quotacheck_v2.c:78 #, c-format msgid "" "Size of file: %lu\n" "Blocks: %u Free block: %u Block with free entry: %u Flags: %x\n" msgstr "" "Dateigröße: %lu\n" "Blöcke: %u Freier Block: %u Block mit freiem Eintrag: %u Flags: %x\n" #: quotacheck_v2.c:85 #, c-format msgid "" "Setting grace times and other flags to default values.\n" "Assuming number of blocks is %u.\n" msgstr "" "Setze Gnadenfristen und andere Flags auf Standardwerde.\n" "Nehme an, daß die Blockanzahl %u beträgt.\n" #: quotacheck_v2.c:102 msgid "File info done.\n" msgstr "Dateiinformationen abgearbeitet.\n" #: quotacheck_v2.c:113 msgid "Corrupted blocks: " msgstr "Zerstörte Blöcke: " #: quotacheck_v2.c:117 #, c-format msgid "Block %u: " msgstr "Block %u: " #: quotacheck_v2.c:179 msgid "Duplicated entries." msgstr "Doppelte Einträge." #: quotacheck_v2.c:183 #, c-format msgid "" "Found more structures for ID %u. Using values: BHARD: %lld BSOFT: %lld " "IHARD: %lld ISOFT: %lld\n" msgstr "" "Mehrere Strukturen für Id %u gefunden. Verwende Werte: BHARD: %lld BSOFT: " "%lld IHARD: %lld ISOFT: %lld\n" #: quotacheck_v2.c:191 #, c-format msgid "" "Found more structures for ID %u. Values: BHARD: %lld/%lld BSOFT: %lld/%lld " "IHARD: %lld/%lld ISOFT: %lld/%lld\n" msgstr "" "Mehrere Strukturen für Id %u gefunden. Werte: BHARD: %lld/%lld BSOFT: %lld/" "%lld IHARD: %lld/%lld ISOFT: %lld/%lld\n" #: quotacheck_v2.c:196 #, fuzzy msgid "Should I use new values?" msgstr "Soll ich neue Werte verwenden" #: quotacheck_v2.c:206 #, c-format msgid "" "ID %u has more structures. User intervention needed (use -i for interactive " "mode or -n for automatic answer).\n" msgstr "" "Id %u hat mehrere Strukturen. Benutzereingriff erforderlich (verwende -i " "für interaktiven Modus oder -n für automatische Antworten).\n" #: quotacheck_v2.c:243 #, c-format msgid "Block %u is truncated.\n" msgstr "Block %u ist abgeschnitten.\n" #: quotacheck_v2.c:252 #, c-format msgid "Reference to illegal block %u" msgstr "Referenz zu ungültigem Block %u" #: quotacheck_v2.c:259 #, c-format msgid "Block %u in tree referenced twice" msgstr "Block %u wird im Baum doppelt referenziert" #: quotacheck_v2.c:275 #, c-format msgid "Illegal free block reference to block %u" msgstr "Ungültige Referenz auf freien Block %u" #: quotacheck_v2.c:278 #, c-format msgid "Corrupted number of used entries (%u)" msgstr "Ungültige Anzahl verwendeter Einträge (%u)" #: quotacheck_v2.c:330 #, c-format msgid "" "Quota file %s has corrupted headers. You have to specify quota format on " "command line.\n" msgstr "" "Kopfinformationen der Quotadatei %s sind zerstört. Bitte geben sie das " "Format auf der Kommandozeile an.\n" #: quotacheck_v2.c:346 msgid "Checking quotafile headers...\n" msgstr "Prüfe Kopfinformationen der Quotadateien...\n" #: quotacheck_v2.c:350 #, c-format msgid "Cannot read header from quotafile %s: %s\n" msgstr "Kann Kopfinformationen aus Quotadatei %s nicht lesen: %s\n" #: quotacheck_v2.c:352 #, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "WARNUNG - Quotadatei %s wurde wahrscheinlich abgeschnitten. Kann " "Quotaeinstellungen nicht retten...\n" #: quotacheck_v2.c:358 #, c-format msgid "WARNING - Quota file %s has corrupted headers\n" msgstr "WARNUNG - Quotadatei %s hat ungültige Kopfinformationen\n" #: quotacheck_v2.c:361 #, fuzzy msgid "Continue checking assuming format from command line?" msgstr "Prüfung unter Annahme der Version von der Kommandozeile fortsetzen?" #: quotacheck_v2.c:365 #, c-format msgid "" "Quota file format version %d does not match the one specified on command " "line (%d). Quota file header may be corrupted.\n" msgstr "" "Quotadateiformatversion %d stimmt nicht mit der Version überein, die auf der " "Kommandozeile angegeben wurde (%d). Quotadateikopf könnte inkonsistent " "sein.\n" #: quotacheck_v2.c:370 msgid "Continue checking assuming version from command line?" msgstr "Prüfung unter Annahme der Version von der Kommandozeile fortsetzen?" #: quotacheck_v2.c:376 msgid "Headers checked.\n" msgstr "Kopfinformationen geprüft.\n" #: quotacheck_v2.c:392 #, c-format msgid "Do not know how to buffer format %d\n" msgstr "Ich weiß nicht, wie das Format %d zwischenzuspeichern ist\n" #: quotacheck_v2.c:402 #, c-format msgid "Headers of file %s checked. Going to load data...\n" msgstr "Kopfinformationen von Datei %s geprüft. Lade Daten...\n" #: quotacheck_v2.c:410 msgid "Cannot gather quota data. Tree root node corrupted.\n" msgstr "Kann Quotadaten nicht laden. Der Baumwurzelknoten ist zerstört.\n" #: quotacheck_v2.c:418 msgid "WARNING - Some data might be changed due to corruption.\n" msgstr "WARNUNG - Einige Daten könnten wegen der Zerstörung geändert werden.\n" #: quotacheck_v2.c:421 msgid "Not found any corrupted blocks. Congratulations.\n" msgstr "Keine zerstörten Blöcke gefunden. Gratulation.\n" #: quotaio.c:62 msgid "Only RPC quota format is allowed on NFS filesystem.\n" msgstr "Nur das RPC-Quotaformat ist bei NFS-Dateisystemen erlaubt.\n" #: quotaio.c:73 msgid "RPC quota format not compiled.\n" msgstr "RPC-Quotaformat nicht mit einkompiliert.\n" #: quotaio.c:77 msgid "RPC quota format specified for non-NFS filesystem.\n" msgstr "" "Es wurde das RPC-Quotaformat für ein Nicht-NFS-Dateisystemen angegeben.\n" #: quotaio.c:85 msgid "Only XFS quota format is allowed on XFS filesystem.\n" msgstr "Nur das XFS-Quotaformat ist auf XFS-Dateisystemen erlaubt.\n" #: quotaio.c:96 msgid "XFS quota allowed only on XFS filesystem.\n" msgstr "XFS-Quotaformat nur auf XFS-Dateisystemen erlaubt.\n" #: quotaio.c:110 msgid "Quota not supported by the filesystem.\n" msgstr "Das Dateisystem unterstützt keine Quotas.\n" #: quotaio.c:130 msgid "Cannot find any quota file to work on.\n" msgstr "Kann keine Quotadatei finden, um sie zu bearbeiten.\n" #: quotaio.c:135 msgid "Quota file not found or has wrong format.\n" msgstr "Quotadatei nicht gefunden oder hat falsches Format.\n" #: quotaio.c:145 #, c-format msgid "Cannot sync quotas on device %s: %s\n" msgstr "Kann Quotas auf Gerät %s nicht synchronisieren: %s\n" #: quotaio.c:176 #, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "Kann Quotas auf %s nicht initialisieren: %s\n" #: quotaio.c:203 #, c-format msgid "Creation of %s quota format is not supported.\n" msgstr "Erzeugung des %s-Quotaformats wird nicht unterstützt.\n" #: quotaio.c:213 #, c-format msgid "" "Quota on %s is stored in system files and must be manipulated by fs tools.\n" msgstr "" #: quotaio.c:223 #, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "Kann neue Quotadatei %s nicht anlegen: %s\n" #: quotaio.c:297 #, fuzzy, c-format msgid "" "Trying to set quota limits out of range supported by quota format on %s.\n" msgstr "Versuche Quota in eine nur-lesbare Quotadatei auf %s zu schreiben\n" #: quotaio.c:303 #, fuzzy, c-format msgid "" "Trying to set quota usage out of range supported by quota format on %s.\n" msgstr "Versuche Quota in eine nur-lesbare Quotadatei auf %s zu schreiben\n" #: quotaio_generic.c:54 #, c-format msgid "Cannot get info for %s quota file from kernel on %s: %s\n" msgstr "" "Kann Informationen für %s-Quotadatei auf %s nicht vom Kernel bekommen: %s\n" #: quotaio_generic.c:72 #, c-format msgid "Cannot set info for %s quota file from kernel on %s: %s\n" msgstr "" "Kann Informationen für %s-Quotadatei vom Kernel auf %s nicht setzen: %s\n" #: quotaio_generic.c:84 #, c-format msgid "Cannot get quota for %s %d from kernel on %s: %s\n" msgstr "Kann Quota für %s %d vom Kernel auf %s nicht bekommen: %s\n" #: quotaio_generic.c:99 #, c-format msgid "Cannot set quota for %s %d from kernel on %s: %s\n" msgstr "Kann Quota für %s %d vom Kernel auf %s nicht setzen: %s\n" #: quotaio_meta.c:23 msgid "Metadata init_io called when kernel support is not enabled.\n" msgstr "" "Metadata init_io aufgerufen, obwohl Kernelunterstützung dafür nicht " "aktiviert.\n" #: quotaio_meta.c:27 msgid "" "Metadata init_io called when kernel does not support generic quota " "interface!\n" msgstr "" "Metadata init_io aufgerufen, obwohl Kernel die allgemeine Quotaschnittstelle " "nicht unterstützt!\n" #: quotaio_rpc.c:77 quotaio_v1.c:278 quotaio_v2.c:464 #, c-format msgid "Trying to write quota to readonly quotafile on %s\n" msgstr "Versuche Quota in eine nur-lesbare Quotadatei auf %s zu schreiben\n" #: quotaio_tree.c:71 #, c-format msgid "Cannot write block (%u): %s\n" msgstr "Kann Block nicht schreiben (%u): %s\n" #: quotaio_tree.c:94 msgid "Cannot allocate new quota block (out of disk space).\n" msgstr "" "Kann keinen neune Quotablock belegen (kein Festplattenspeicherplatz mehr).\n" #: quotaio_tree.c:202 msgid "find_free_dqentry(): Data block full but it shouldn't.\n" msgstr "find_free_dqentry(): Datenblock voll, aber er sollte es nicht sein.\n" #: quotaio_tree.c:237 #, c-format msgid "Inserting already present quota entry (block %u).\n" msgstr "Füge schon vorhandenen Quotaeintrag ein (Block %u).\n" #: quotaio_tree.c:260 #, c-format msgid "Cannot write quota (id %u): %s\n" msgstr "Kann Quota nicht schreiben (Id %u): %s\n" #: quotaio_tree.c:279 #, c-format msgid "Quota write failed (id %u): %s\n" msgstr "Quotaschreiben fehlgeschlagen (Id %u): %s\n" #: quotaio_tree.c:291 #, c-format msgid "Quota structure has offset to other block (%u) than it should (%u).\n" msgstr "" "Quotastruktur hat Versatz (offset) zu einem anderen Block (%u) als sie " "sollte (%u).\n" #: quotaio_tree.c:367 #, c-format msgid "Quota for id %u referenced but not present.\n" msgstr "Quota für Id %u referenziert aber nicht vorhanden.\n" #: quotaio_tree.c:426 #, c-format msgid "Cannot read quota structure for id %u: %s\n" msgstr "Kann Quotastruktur für Id %u nicht lesen: %s\n" #: quotaio_tree.c:468 #, c-format msgid "" "Illegal reference (%u >= %u) in %s quota file on %s. Quota file is probably " "corrupted.\n" "Please run quotacheck(8) and try again.\n" msgstr "" "Ungültige Referenz (%u >= %u) in %s-Quotadatei auf %s. Quotadatei ist " "wahrscheinlich defekt.\n" "Bitte lassen Sie quotacheck(8) laufen und versuchen Sie es nochmal.\n" #: quotaio_v1.c:184 #, c-format msgid "Trying to write info to readonly quotafile on %s.\n" msgstr "" "Versuche Information in eine nur-lesbare Quotadatei auf %s zu schreiben.\n" #: quotaio_v2.c:255 msgid "" "Your quota file is stored in wrong endianity. Please use convertquota(8) to " "convert it.\n" msgstr "" "Ihre Quotadatei ist in der falschen Bytereihenfolge gespeichert. Bitte " "konvertieren sie sie mit convertquota(8).\n" #: quotaio_v2.c:388 #, c-format msgid "Trying to write info to readonly quotafile on %s\n" msgstr "" "Versuche Information in eine nur-lesbare Quotadatei auf %s zu schreiben\n" #: quotaio_v2.c:518 #, c-format msgid "" "Statistics:\n" "Total blocks: %u\n" "Data blocks: %u\n" "Entries: %u\n" "Used average: %f\n" msgstr "" "Statistik:\n" "Gesamtblockzahl: %u\n" "Datenblöcke: %u\n" "Enträge: %u\n" "Durchschnittlich verwendet: %f\n" #: quotaio_xfs.c:53 msgid "Truncating kernel returned time stamp." msgstr "" #: quotaio_xfs.c:311 #, c-format msgid "*** Status for %s quotas on device %s\n" msgstr "*** Status für %s-Quotas auf Gerät %s\n" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "ON" msgstr "AN" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "OFF" msgstr "AUS" #: quotaio_xfs.c:315 quotaio_xfs.c:319 quotaio_xfs.c:323 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "Kontierung: %s; Vollstreckung: %s\n" #: quotaio_xfs.c:335 quotaio_xfs.c:339 quotaio_xfs.c:343 #, c-format msgid "Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n" msgstr "" "Kontierung [auf Datenträger]: %s; Vollstreckung [auf Datenträger]: %s\n" #: quotaio_xfs.c:352 quotaio_xfs.c:361 quotaio_xfs.c:374 #, c-format msgid "Inode: none\n" msgstr "Inode: keines\n" #: quotaio_xfs.c:354 quotaio_xfs.c:363 quotaio_xfs.c:376 #, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "Inode: #%llu (%llu Blöcke, %u Extents)\n" #: quotaon.c:37 #, fuzzy, c-format msgid "" "Usage:\n" "\t%s [-guPvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guPvp] [-F quotaformat] [-x state] filesys ...\n" "\n" "-a, --all %s\n" "-f, --off turn quotas off\n" "-u, --user operate on user quotas\n" "-g, --group operate on group quotas\n" "-P, --project operate on project quotas\n" "-p, --print-state print whether quotas are on or off\n" "-x, --xfs-command=cmd perform XFS quota command\n" "-F, --format=formatname operate on specific quota format\n" "-v, --verbose print more messages\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" msgstr "" "Verwendung:\n" "\t%s [-guvp] [-F quotaformat] [-x zustand] -a\n" "\t%s [-guvp] [-F quotaformat] [-x zustand] dateisystem ...\n" "\n" "-a, --all aktiviere Quoatas für alle Dateisysteme\n" "-f, --off deaktiviere Quotas\n" "-u, --user ändere Benutzerquotas\n" "-g, --group ändere Gruppenquotas\n" "-p, --print-state Ausgeben, ob Quotas aktiv sind\n" "-x, --xfs-command=cmd XFS-Quota-Kommando ausführen\n" "-F, --format=formatname ändere bestimmtes Quotaformat\n" "-v, --verbose mehr Nachrichten ausgeben\n" "-h, --help zeige diesen Hilfetext und beende\n" "-V, --version zeige Versionsinformation und beende\n" #: quotaon.c:51 msgid "turn quotas off for all filesystems" msgstr "" #: quotaon.c:52 #, fuzzy msgid "turn quotas on for all filesystems" msgstr "XFS-Quotaformat nur auf XFS-Dateisystemen erlaubt.\n" #: quotaon.c:117 msgid "Cannot turn on/off quotas via RPC.\n" msgstr "Kann Quotas via RPC nicht an-/ausschalten.\n" #: quotaon.c:164 #, c-format msgid "set root_squash on %s: %s\n" msgstr "Setze root_squash auf %s: %s\n" #: quotaon.c:168 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "%s: %s root_squash abgeschalten\n" #: quotaon.c:170 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "%s: %s root_squash angeschalten\n" #: quotaon.c:188 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "quotactl auf %s [%s]: %s\n" #: quotaon.c:191 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "%s [%s]: %s Quotas abgeschalten\n" #: quotaon.c:204 #, c-format msgid "cannot find %s on %s [%s]\n" msgstr "Kann %s auf %s [%s] nicht finden\n" #: quotaon.c:206 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "verwende %s auf %s [%s]: %s\n" #: quotaon.c:208 msgid "Maybe create new quota files with quotacheck(8)?\n" msgstr "Vielleicht sollten Sie neue Quotadateien mit quotacheck(8) erzeugen?\n" #: quotaon.c:210 msgid "Quota format not supported in kernel.\n" msgstr "Quotaformat wird vom Kernel nicht unterstützt.\n" #: quotaon.c:213 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "%s [%s]: %s Quotas angeschalten\n" #: quotaon.c:254 #, fuzzy msgid "Cannot change state of GFS2 quota.\n" msgstr "Kann Namen der Quotadatei im neuen Format nicht bekommen.\n" #: quotaon.c:259 msgid "Cannot change state of XFS quota. It's not compiled in kernel.\n" msgstr "" "Kann Zustand des XFS-Quotas nicht ändern. Unterstützung dafür wurde nicht " "in den Kernel einkompiliert.\n" #: quotaon.c:295 #, c-format msgid "Cannot find quota file on %s [%s] to turn quotas on/off.\n" msgstr "" "Kann Quotadatei auf %s [%s] nicht finden, um Quotas zu (de-)aktivieren.\n" #: quotaon.c:300 #, c-format msgid "Quota file on %s [%s] does not exist or has wrong format.\n" msgstr "Quotadatei auf %s [%s] existiert nicht oder hat falsches Format.\n" #: quotaon.c:330 quotaon.c:346 msgid "off" msgstr "aus" #: quotaon.c:332 #, fuzzy msgid "on (accounting)" msgstr "und -kontierung " #: quotaon.c:334 msgid "on (enforced)" msgstr "" #: quotaon.c:346 msgid "on" msgstr "an" #: quotaon.c:348 #, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "%s-Quota auf %s (%s) ist %s\n" #: quotaon.c:365 #, c-format msgid "Name must be quotaon or quotaoff not %s\n" msgstr "Name muss entweder quotaon oder quotaoff sein, aber nicht %s\n" #: quotaon.c:371 #, c-format msgid "Required format %s not supported by kernel.\n" msgstr "Erforderliches Format %s wird nicht vom Kernel unterstützt.\n" #: quotaon.c:373 msgid "Warning: No quota format detected in the kernel.\n" msgstr "Warnung: Kein Quotaformat im Kernel festgestellt.\n" #: quotaon.c:380 #, fuzzy, c-format msgid "%s: Quota cannot be turned on on NFS filesystem\n" msgstr "XFS-Quotaformat nur auf XFS-Dateisystemen erlaubt.\n" #: quotaon_xfs.c:36 #, c-format msgid "quotactl() on %s: %s\n" msgstr "quotactl() auf %s: %s\n" #: quotaon_xfs.c:68 quotaon_xfs.c:88 #, c-format msgid "Enabling %s quota on root filesystem (reboot to take effect)\n" msgstr "" "Aktiviere %s-Quota auf dem root-Dateisystem (starten Sie neu, damit diese " "Änderung wirksam wird)\n" #: quotaon_xfs.c:72 #, c-format msgid "Enable XFS %s quota accounting during mount\n" msgstr "Aktiviere XFS-%s-Quota-Kontierung während des Mountens\n" #: quotaon_xfs.c:82 #, c-format msgid "Cannot delete %s quota on %s - switch quota accounting off first\n" msgstr "" "Kann %s-Quota auf %s nicht löschen - deaktivieren Sie zuerst " "Quotakontierung\n" #: quotaon_xfs.c:95 #, c-format msgid "Enabling %s quota enforcement on %s\n" msgstr "Aktiviere %s-Quotavollstreckung auf %s\n" #: quotaon_xfs.c:98 #, c-format msgid "Already accounting %s quota on %s\n" msgstr "Kontierung für %s-Quota auf %s ist schon aktiv\n" #: quotaon_xfs.c:105 #, c-format msgid "Disabling %s quota accounting on %s\n" msgstr "Deaktiviere %s-Quota-Kontierung auf %s\n" #: quotaon_xfs.c:109 #, c-format msgid "Quota enforcement already disabled for %s on %s\n" msgstr "Quotavollstreckung schon deaktiviert für %s auf %s\n" #: quotaon_xfs.c:118 #, c-format msgid "" "Cannot delete %s quota on %s - switch quota enforcement and accounting off " "first\n" msgstr "" "Kann %s-Quota auf %s nicht löschen - schalten Sie Quotavollstreckuckung und -" "kontierung zuerst ab\n" #: quotaon_xfs.c:123 #, c-format msgid "Enforcing %s quota already on %s\n" msgstr "Vollstreckung der %s-Quota schon aktiv auf %s\n" #: quotaon_xfs.c:130 #, c-format msgid "Cannot switch off %s quota accounting on %s when enforcement is on\n" msgstr "" "Kann %s-Quota-Kontierung nicht abschalten auf %s, wenn Vollstreckung aktiv " "ist\n" #: quotaon_xfs.c:138 msgid "and accounting " msgstr "und -kontierung " #: quotaon_xfs.c:139 #, c-format msgid "Disabling %s quota enforcement %son %s\n" msgstr "Deaktiviere %s-Quota-Vollstreckung %sauf %s\n" #: quotaon_xfs.c:145 #, c-format msgid "Unexpected XFS quota state sought on %s\n" msgstr "Unerwarteter XFS-Quota-Zielzustand angefordert auf %s\n" #: quotaon_xfs.c:160 #, c-format msgid "quotactl on %s: %s\n" msgstr "quotactl auf %s: %s\n" #: quotaon_xfs.c:164 #, c-format msgid "%s: %s quotas turned off\n" msgstr "%s: %s-Quotas deaktiviert\n" #: quotaon_xfs.c:166 #, c-format msgid "%s: %s quotas turned on\n" msgstr "%s: %s-Quotas aktiv\n" #: quotaon_xfs.c:180 #, c-format msgid "Failed to delete quota: %s\n" msgstr "Konnte Quota nicht löschen: %s\n" #: quotaon_xfs.c:185 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "%s: %s-Quota-Blöcke gelöscht\n" #: quotaon_xfs.c:248 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "Ungültiges Argument \"%s\"\n" #: quotaops.c:82 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "%s (Benutzer-Id %d): Zugriff verweigert\n" #: quotaops.c:94 #, c-format msgid "%s (gid %d): gid set allocation (%d): %s\n" msgstr "%s (Gid %d): gid set Speicheranforderung (%d): %s\n" #: quotaops.c:105 #, c-format msgid "%s (gid %d): error while trying getgroups(): %s\n" msgstr "%s (Gid %d): Fehler beim Aufruf von getgroups(): %s\n" #: quotaops.c:116 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "%s (Gid %d): Zugriff verweigert\n" #: quotaops.c:134 #, fuzzy msgid "Cannot connect to RPC quota service" msgstr "Kann nicht zum Netlink-Socket verbinden: %s\n" #: quotaops.c:136 msgid "Quota not enabled" msgstr "" #: quotaops.c:141 #, c-format msgid "error while getting quota from %s for %s (id %u): %s\n" msgstr "Fehler beim Holen der Quotas von %s für %s (Id %u): %s\n" #: quotaops.c:169 #, c-format msgid "Cannot write quota for %u on %s: %s\n" msgstr "Kann Quota für %u auf %s nicht schreiben: %s\n" #: quotaops.c:204 quotaops.c:206 #, fuzzy, c-format msgid "%s failed: %s\n" msgstr "%s-Quota auf %s (%s) ist %s\n" #: quotaops.c:220 msgid "Too many parameters to editor.\n" msgstr "Zu viele Parameter für den Editor.\n" #: quotaops.c:228 #, c-format msgid "Cannot exec %s\n" msgstr "Kann 'exec %s nicht ausführen\n" #: quotaops.c:245 #, fuzzy, c-format msgid "Cannot truncate a file: %s\n" msgstr "Kann Informationen über Quotadatei %s nicht abrufen: %s\n" #: quotaops.c:247 #, fuzzy, c-format msgid "Cannot reset a file offset: %s\n" msgstr "Kann 'stat'-Datei %s nicht lesen: %s\n" #: quotaops.c:249 #, fuzzy, c-format msgid "Cannot duplicate a file descriptor: %s\n" msgstr "Konnte Dateideskriptor nicht duplizieren: %s\n" #: quotaops.c:251 #, fuzzy, c-format msgid "Cannot open a stream to write to: %s\n" msgstr "Kann temporäre Datei nicht neu öffnen: %s\n" #: quotaops.c:252 #, fuzzy, c-format msgid "Cannot open a stream to read from: %s\n" msgstr "Kann temporäre Datei nicht neu öffnen: %s\n" #: quotaops.c:268 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "Datenträgerquotas für %s %s (%cid %d):\n" #: quotaops.c:272 #, c-format msgid "" " Filesystem blocks soft hard inodes " "soft hard\n" msgstr "" " Dateisystem Blöcke weich hart Inodes " "weich hart\n" #: quotaops.c:305 #, c-format msgid "WARNING - %s: cannot change current block allocation\n" msgstr "WARNUNG - %s: Kann aktuelle Blockbelegung nicht ändern\n" #: quotaops.c:308 #, c-format msgid "WARNING - %s: cannot change current inode allocation\n" msgstr "WARNUNG - %s: Kann aktuelle Inodebelegung nicht ändern\n" #: quotaops.c:334 msgid "Bad format: two title lines assumed\n" msgstr "" #: quotaops.c:345 #, c-format msgid "" "Bad format:\n" "%s\n" msgstr "" "Falsches Format:\n" "%s\n" #: quotaops.c:351 #, fuzzy, c-format msgid "Bad block usage: %s: %s\n" msgstr "Fehlerhafte Angabe für %s: %s\n" #: quotaops.c:358 #, fuzzy, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "weiches Blocklimit" #: quotaops.c:365 #, fuzzy, c-format msgid "Bad block hard limit: %s: %s\n" msgstr "hartes Blocklimit" #: quotaops.c:372 #, fuzzy, c-format msgid "Bad inode usage: %s: %s\n" msgstr "Fehlerhafte Angabe für %s: %s\n" #: quotaops.c:379 #, fuzzy, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "weiches Inodelimit" #: quotaops.c:386 #, fuzzy, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "hartes Inodelimit" #: quotaops.c:439 #, c-format msgid "Times to enforce softlimit for %s %s (%cid %d):\n" msgstr "" "Gnadenfristen, bis weiche Limits durchgesetzt werden für %s %s (%cid %d):\n" #: quotaops.c:441 quotaops.c:544 #, c-format msgid "Time units may be: days, hours, minutes, or seconds\n" msgstr "Zeiteinheiten dürfen sein: days, hours, minutes, oder seconds\n" #: quotaops.c:443 #, c-format msgid "" " Filesystem block grace inode grace\n" msgstr "" " Dateisystem Blockgnadenfrist " "Inodegnadenfrist\n" #: quotaops.c:448 quotaops.c:454 quotaops.c:499 quotaops.c:512 setquota.c:288 #: setquota.c:294 msgid "unset" msgstr "nicht festgelegt" #: quotaops.c:450 quotaops.c:456 msgid "0seconds" msgstr "0seconds" #: quotaops.c:452 quotaops.c:458 quotasys.c:504 #, c-format msgid "%useconds" msgstr "%useconds" #: quotaops.c:485 quotaops.c:584 msgid "Bad format: three title lines assumed\n" msgstr "" #: quotaops.c:495 quotaops.c:592 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" "falsches Format:\n" "%s\n" #: quotaops.c:506 quotaops.c:598 msgid "Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n" msgstr "" "Fehlerhafte Zeiteinheiten. Einheiten sind 'second', 'minute', 'hour' und " "'day'.\n" #: quotaops.c:542 #, c-format msgid "Grace period before enforcing soft limits for %ss:\n" msgstr "Gnadenfrist bevor die weichen Limits durchgesetzt werden für %ss:\n" #: quotaops.c:545 #, c-format msgid " Filesystem Block grace period Inode grace period\n" msgstr " Dateisystem Blockgnadenfrist Inodegnadenfrist\n" #: quotastats.c:48 #, c-format msgid "Cannot read stat file %s: %s\n" msgstr "Kann 'stat'-Datei %s nicht lesen: %s\n" #: quotastats.c:83 #, c-format msgid "Error while getting quota statistics from kernel: %s\n" msgstr "Fehler beim Holen von Quotastatistiken vom Kernel: %s\n" #: quotastats.c:87 #, c-format msgid "Error while getting old quota statistics from kernel: %s\n" msgstr "Fehler beim Holen von alten Quotastatistiken vom Kernel: %s\n" #: quotastats.c:101 #, c-format msgid "Kernel quota version: old\n" msgstr "Kernel Quota Version: alt\n" #: quotastats.c:103 #, c-format msgid "Kernel quota version: %u.%u.%u\n" msgstr "Kernel Quota Version: %u.%u.%u\n" #: quotastats.c:104 #, c-format msgid "Number of dquot lookups: %ld\n" msgstr "Anzahl an dquot-Nachschlagungen: %ld\n" #: quotastats.c:105 #, c-format msgid "Number of dquot drops: %ld\n" msgstr "Anzahl an dquot-Löschungen: %ld\n" #: quotastats.c:106 #, c-format msgid "Number of dquot reads: %ld\n" msgstr "Anzahl an dquot-Lesevorgängen: %ld\n" #: quotastats.c:107 #, c-format msgid "Number of dquot writes: %ld\n" msgstr "Anzahl an dquot-Schreibvorgängen: %ld\n" #: quotastats.c:108 #, c-format msgid "Number of quotafile syncs: %ld\n" msgstr "Anzahl an Quotadatei-Synchronisierungen: %ld\n" #: quotastats.c:109 #, c-format msgid "Number of dquot cache hits: %ld\n" msgstr "Anzahl an dquot-Cachetreffern: %ld\n" #: quotastats.c:110 #, c-format msgid "Number of allocated dquots: %ld\n" msgstr "Anzahl an belegten dquot-Datenstrukturen: %ld\n" #: quotastats.c:111 #, c-format msgid "Number of free dquots: %ld\n" msgstr "Anzahl freier dquot-Datenstrukturen: %ld\n" #: quotastats.c:112 #, c-format msgid "Number of in use dquot entries (user/group): %ld\n" msgstr "Anzahl verwendeter dquot-Einträge (Benutzer/Gruppen): %ld\n" #: setquota.c:59 #, fuzzy, c-format msgid "" "Usage:\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <user|group|project>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <-p protouser|protogroup|" "protoproject> <user|group|project> -a|<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] -b [-c] -a|<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] -t <blockgrace> <inodegrace> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] <user|group|project> -T <blockgrace> " "<inodegrace> -a|<filesystem>...\n" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\n" "-P, --project set limits for project\n" "-a, --all set limits for all filesystems\n" " --always-resolve always try to resolve name, even if is\n" " composed only of digits\n" "-F, --format=formatname operate on specific quota format\n" "-p, --prototype=protoname copy limits from user/group/project\n" "-b, --batch read limits from standard input\n" "-c, --continue-batch continue in input processing in case of an error\n" msgstr "" "Verwendung:\n" " setquota [-u|-g] %1$s[-F Quotaformat] <Benutzer|Gruppe>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<Dateisystem>...\n" " setquota [-u|-g] %1$s[-F Quotaformat] <-p protouser|protogroup> <Benutzer|" "Gruppe> -a|<Dateisystem>...\n" " setquota [-u|-g] %1$s[-F Quotaformat] -b [-c] -a|<Dateisystem>...\n" " setquota [-u|-g] [-F Quotaformat] -t <blockgrace> <inodegrace> -a|" "<Dateisystem>...\n" " setquota [-u|-g] [-F Quotaformat] <Benutzer|Gruppe> -T <blockgrace> " "<inodegrace> -a|<Dateisystemsystem>...\n" "\n" "-u, --user Setze Limit für Benutzer\n" "-g, --group Setze Limits für Gruppe\n" "-a, --all Setze Limits für alle Dateisysteme\n" " --always-resolve Versuche stets einen Namen aufzulösen, auch wenn " "er\n" " nur aus Ziffern besteht\n" "-F, --format=Quotaformat Operiere auf einem bestimmten Quotaformat\n" "-p, --prototype=protoname Kopiere Limits von Benutzer/Gruppe\n" "-b, --batch Lese Limits von Standardeingabe\n" "-c, --continue-batch Eingabeverarbeitung auch bei Fehlern fortsetzen\n" #: setquota.c:77 msgid "" "-r, --remote set remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" "-r, --remote Setze entferntes Quota (über RPC)\n" "-m, --no-mixed-pathnames Entferne führende Schrägstriche (/) von NFSv4-" "Einhängepunkten\n" #: setquota.c:80 #, fuzzy msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group/project\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "-t, --edit-period Bearbeite Standard-Gnadenfrist\n" "-T, --edit-times Bearbeite Gnadenfristen für Benutzer/Gruppe\n" "-h, --help Zeige diese Hilfe und beende\n" "-V, --version Zeige Versionsinformationen und beende\n" "\n" #: setquota.c:84 edquota.c:73 quota.c:94 #, c-format msgid "Bugs to: %s\n" msgstr "Fehler an: %s\n" #: setquota.c:95 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" #: setquota.c:108 setquota.c:121 #, fuzzy, c-format msgid "%s: %s: %s\n" msgstr "%s (%s) %s:\n" #: setquota.c:229 #, fuzzy msgid "Group/user/project quotas cannot be used together.\n" msgstr "" "Gruppen- und Benutzerquotas können nicht gleichzeitig verändert werden.\n" #: setquota.c:233 msgid "Prototype user has no sense when editing grace times.\n" msgstr "Prototyp macht keinen Sinn beim Bearbeiten von Gnadenfristen.\n" #: setquota.c:237 msgid "Cannot set both individual and global grace time.\n" msgstr "" "Kann nicht gleichzeitig die individuelle und die Standard-Gnadenfrist " "setzen.\n" #: setquota.c:241 msgid "Batch mode cannot be used for setting grace times.\n" msgstr "Stapelmodus kann nicht verwendet werden, um Gnadenfristen zu setzen.\n" #: setquota.c:245 msgid "Batch mode and prototype user cannot be used together.\n" msgstr "Stapelmodus und Prototypen können nicht zusammen verwendet werden.\n" #: setquota.c:249 #, fuzzy msgid "Cannot set grace times over RPC protocol.\n" msgstr "Kann Gnadenfristen nicht in Datei ablegen.\n" #: setquota.c:272 #, fuzzy msgid "Bad block softlimit" msgstr "weiches Blocklimit" #: setquota.c:273 #, fuzzy msgid "Bad block hardlimit" msgstr "hartes Blocklimit" #: setquota.c:274 #, fuzzy msgid "Bad inode softlimit" msgstr "weiches Inodelimit" #: setquota.c:275 #, fuzzy msgid "Bad inode hardlimit" msgstr "hartes Inodelimit" #: setquota.c:281 setquota.c:293 #, fuzzy msgid "Bad block grace time" msgstr "Blockgnadenfrist" #: setquota.c:282 setquota.c:299 #, fuzzy msgid "Bad inode grace time" msgstr "Inodegnadenfrist" #: setquota.c:305 msgid "Mountpoint not specified.\n" msgstr "Einhängepunkt nicht angegeben.\n" #: setquota.c:319 setquota.c:450 setquota.c:493 #, fuzzy msgid "Error getting quota information to update.\n" msgstr "Kann Quota-Informationen für Nutzer %s nicht erhalten.\n" #: setquota.c:325 msgid "Error getting prototype quota information.\n" msgstr "" #: setquota.c:372 #, c-format msgid "Line %d too long.\n" msgstr "Zeile %d zu lang.\n" #: setquota.c:384 #, c-format msgid "Cannot parse input line %d.\n" msgstr "Kann Eingabezeile %d nicht verarbeiten.\n" #: setquota.c:386 setquota.c:394 setquota.c:403 setquota.c:412 setquota.c:421 #: setquota.c:430 msgid "Exitting.\n" msgstr "Beende.\n" #: setquota.c:387 setquota.c:395 setquota.c:404 setquota.c:413 setquota.c:422 #: setquota.c:431 msgid "Skipping line.\n" msgstr "Überspringe Zeile.\n" #: setquota.c:392 #, c-format msgid "Unable to resolve name '%s' on line %d.\n" msgstr "Kann Namen '%s' in Zeile %d nicht auflösen.\n" #: setquota.c:400 #, fuzzy, c-format msgid "Unable to parse block soft limit '%s' on line %d: %s\n" msgstr "Kann Namen '%s' in Zeile %d nicht auflösen.\n" #: setquota.c:409 #, fuzzy, c-format msgid "Unable to parse block hard limit '%s' on line %d: %s\n" msgstr "Kann Namen '%s' in Zeile %d nicht auflösen.\n" #: setquota.c:418 #, fuzzy, c-format msgid "Unable to parse inode soft limit '%s' on line %d: %s\n" msgstr "Kann Namen '%s' in Zeile %d nicht auflösen.\n" #: setquota.c:427 #, fuzzy, c-format msgid "Unable to parse inode hard limit '%s' on line %d: %s\n" msgstr "Kann Namen '%s' in Zeile %d nicht auflösen.\n" #: setquota.c:474 #, fuzzy, c-format msgid "Setting grace period on %s is not supported.\n" msgstr "Erzeugung des %s-Quotaformats wird nicht unterstützt.\n" #: setquota.c:500 #, c-format msgid "Not setting block grace time on %s because softlimit is not exceeded.\n" msgstr "" "Setze Blockgnadenfrist auf %s nicht, denn das weiche Limit ist nicht " "überschritten.\n" #: setquota.c:504 #, c-format msgid "Not setting inode grace time on %s because softlimit is not exceeded.\n" msgstr "" "Setze Inodegnadenfrist auf %s nicht, denn das weiche Limit ist nicht " "überschritten.\n" #: setquota.c:515 #, c-format msgid "" "cannot write times for %s. Maybe kernel does not support such operation?\n" msgstr "" "Kann die Zeiten für %s nicht schreiben. Vielleicht unterstützt der Kernel " "diese Operation nicht?\n" #: quotasys.c:190 #, c-format msgid "user %s does not exist.\n" msgstr "Benutzer %s existiert nicht.\n" #: quotasys.c:219 #, c-format msgid "group %s does not exist.\n" msgstr "Gruppe %s existiert nicht.\n" #: quotasys.c:249 #, fuzzy, c-format msgid "project %s does not exist.\n" msgstr "Gruppe %s existiert nicht.\n" #: quotasys.c:371 #, c-format msgid "" "Unknown quota format: %s\n" "Supported formats are:\n" " vfsold - original quota format\n" " vfsv0 - standard quota format\n" " vfsv1 - quota format with 64-bit limits\n" " rpc - use RPC calls\n" " xfs - XFS quota format\n" msgstr "" "Unbekanntes Quotaformat: %s\n" "Unterstützte Formate sind:\n" " vfsold - originalas Quotaformat\n" " vfsv0 - neues Quotaformat\n" " vfsv1 - Quotaformat mit 64-bit-Limits\n" " rpc - verwende RPC-Aufrufe\n" " xfs - XFS-Quotaformat\n" #: quotasys.c:398 #, c-format msgid "" "Unknown output format: %s\n" "Supported formats are:\n" " default - default\n" " csv - comma-separated values\n" " xml - simple XML\n" msgstr "" #: quotasys.c:460 quota.c:282 msgid "none" msgstr "kein" #: quotasys.c:492 #, c-format msgid "%ddays" msgstr "%ddays" #: quotasys.c:494 #, c-format msgid "%02d:%02d" msgstr "%02d:%02d" #: quotasys.c:506 #, c-format msgid "%uminutes" msgstr "%uminutes" #: quotasys.c:508 #, c-format msgid "%uhours" msgstr "%uhours" #: quotasys.c:510 #, c-format msgid "%udays" msgstr "%udays" #: quotasys.c:519 #, fuzzy msgid "second" msgstr "0seconds" #: quotasys.c:519 #, fuzzy msgid "seconds" msgstr "0seconds" #: quotasys.c:521 #, fuzzy msgid "minute" msgstr "%uminutes" #: quotasys.c:521 #, fuzzy msgid "minutes" msgstr "%uminutes" #: quotasys.c:523 #, fuzzy msgid "hour" msgstr "%uhours" #: quotasys.c:523 #, fuzzy msgid "hours" msgstr "%uhours" #: quotasys.c:525 #, fuzzy msgid "day" msgstr "%ddays" #: quotasys.c:525 #, fuzzy msgid "days" msgstr "%ddays" #: quotasys.c:583 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:585 msgid "K" msgstr "" #: quotasys.c:587 msgid "M" msgstr "" #: quotasys.c:589 msgid "G" msgstr "" #: quotasys.c:591 msgid "T" msgstr "" #: quotasys.c:594 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:598 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:651 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:655 msgid "k" msgstr "" #: quotasys.c:657 msgid "m" msgstr "" #: quotasys.c:659 msgid "g" msgstr "" #: quotasys.c:661 msgid "t" msgstr "" #: quotasys.c:664 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:668 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:827 #, c-format msgid "Cannot stat quota file %s: %s\n" msgstr "Kann Informationen über Quotadatei %s nicht abrufen: %s\n" #: quotasys.c:975 msgid "Not all specified mountpoints are using quota.\n" msgstr "Nicht alle angegebenen Mountpunkte verwenden Quotas.\n" #: quotasys.c:989 #, c-format msgid "Error while releasing file on %s\n" msgstr "Fehler bei Dateifreigabe auf %s\n" #: quotasys.c:1048 #, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "Kann Menge für sigaction() nicht erzeugen: %s\n" #: quotasys.c:1051 #, c-format msgid "Cannot set signal handler: %s\n" msgstr "Kann Signalbehandler nicht setzen: %s\n" #: quotasys.c:1107 #, c-format msgid "Cannot reset signal handler: %s\n" msgstr "Kann Signalbehandler nicht zurücksetzen: %s\n" #: quotasys.c:1262 msgid "Cannot open any file with mount points.\n" msgstr "Kann keine Datei mit Einhängepunkten öffnen.\n" #: quotasys.c:1280 #, c-format msgid "Cannot get device name for %s\n" msgstr "Kann Gerätenamen für %s nicht bekommen\n" #: quotasys.c:1340 #, c-format msgid "Cannot resolve mountpoint path %s: %s\n" msgstr "Kann Mountpunkt-Pfad %s nicht auflösen: %s\n" #: quotasys.c:1346 #, c-format msgid "Cannot statfs() %s: %s\n" msgstr "statfs() für %s fehlgeschlagen: %s\n" #: quotasys.c:1358 #, c-format msgid "Cannot stat() mounted device %s: %s\n" msgstr "stat() für eingebundenes Gerät %s fehlgeschlagen: %s\n" #: quotasys.c:1363 #, c-format msgid "" "Device (%s) filesystem is mounted on unsupported device type. Skipping.\n" msgstr "" "Gerät (%s): Dateisystem ist auf einem nicht unterstützten Gerätetyp " "eingehängt. Überspringe.\n" #: quotasys.c:1373 #, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "stat() für Einhängepunkt %s fehlgeschlagen: %s\n" #: quotasys.c:1442 #, c-format msgid "" "Cannot find a device with %s.\n" "Skipping...\n" msgstr "" "Kann kein Gerät mit %s finden.\n" "Überspringe...\n" #: quotasys.c:1446 #, c-format msgid "" "Cannot stat() a mountpoint with %s: %s\n" "Skipping...\n" msgstr "" "stat() für Einhängepunkt %s fehlgeschlagen: %s\n" "Überspringe...\n" #: quotasys.c:1454 #, c-format msgid "" "Cannot stat() given mountpoint %s: %s\n" "Skipping...\n" msgstr "" "stat() für Einhängepunkt %s fehlgeschlagen: %s\n" "Überspringe...\n" #: quotasys.c:1464 #, c-format msgid "Cannot find a filesystem mountpoint for directory %s\n" msgstr "Kann keinen Dateisystem-Einhängepunkt für Verzeichnis %s finden\n" #: quotasys.c:1470 #, c-format msgid "Cannot resolve path %s: %s\n" msgstr "Kann Pfad %s nicht auflösen: %s\n" #: quotasys.c:1481 #, c-format msgid "Cannot find mountpoint for device %s\n" msgstr "Kann Einhängepunkt für Gerät %s nicht finden\n" #: quotasys.c:1487 #, c-format msgid "Specified path %s is not directory nor device.\n" msgstr "Angegebener Pfad %s ist weder ein Verzeichnis noch ein Gerät.\n" #: quotasys.c:1495 msgid "No correct mountpoint specified.\n" msgstr "Es wurde kein korrekter Einhängepunkt angegeben.\n" #: quotasys.c:1550 #, c-format msgid "Mountpoint (or device) %s not found or has no quota enabled.\n" msgstr "" "Einhängepunkt oder Gerät %s nicht gefunden oder hat keine aktivierten " "Quotas.\n" #: rquota_svc.c:86 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -s --no-setquota disables remote calls to setquota (default)\n" " -S --setquota enables remote calls to setquota\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" "Verwendung: %s [Optionen]\n" "Optionen sind:\n" " -h --help zeigt diesen Text\n" " -V --version zeigt Versionsinformationen\n" " -F --foreground Startet den Quota-Service im Vordergrund\n" " -I --autofs Einhängepunkte vom Automounter nicht ignorieren\n" " -p --port <port> Lausche auf gegebenem Port\n" " -s --no-setquota Deaktiviert entfernte Aufrufe für setquota " "(Voreinstellung)\n" " -S --setquota Aktivierte entfernte Aufrufe für setquota\n" " -x --xtab <path> Daeipfad zu alternativer NFSD-export-Tabelle\n" #: rquota_svc.c:97 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" "Verwendung: %s [Optionen]\n" "Optionen sind:\n" " -h --help zeigt diesen Text\n" " -V --version zeigt Versionsinformationen\n" " -F --foreground Startet den Quota-Service im Vordergrund\n" " -I --autofs Einhängepunkte vom Automounter nicht ignorieren\n" " -p --port <port> Lausche auf gegebenem Port\n" " -x --xtab <path> Daeipfad zu alternativer NFSD-export-Tabelle\n" #: rquota_svc.c:144 #, c-format msgid "Illegal port number: %s\n" msgstr "Illegale Portnummer: %s\n" #: rquota_svc.c:151 #, c-format msgid "Cannot access the specified xtab file %s: %s\n" msgstr "Kann auf angegebene xtab-Datei %s nicht zugreifen: %s\n" #: rquota_svc.c:189 #, c-format msgid "unknown address family %u for RPC request\n" msgstr "" #: rquota_svc.c:195 #, c-format msgid "failed to translate address for RPC request: %s\n" msgstr "" #: rquota_svc.c:204 #, c-format msgid "host %s attempted to call setquota when disabled\n" msgstr "Rechner %s versuchte setquota aufzurufen, während es deaktiviert ist\n" #: rquota_svc.c:211 #, c-format msgid "host %s attempted to call setquota from port >= 1024\n" msgstr "Rechner %s hat versucht, setquota von einem Port >= 1024 aufzurufen\n" #: rquota_svc.c:226 #, c-format msgid "Denied access to host %s\n" msgstr "Zugang verweigert für Rechner %s\n" #: rquota_svc.c:314 rquota_svc.c:400 msgid "unable to free arguments\n" msgstr "Unfähig Argumente freizugeben\n" #: rquota_svc.c:423 #, c-format msgid "" "Warning: Cannot open export table %s: %s\n" "Using '/' as a pseudofilesystem root.\n" msgstr "" "Warnung: Kann Exporttabelle %s nicht öffnen: %s\n" "Verwende '/' als Pseudodateisystemwurzel.\n" #: rquota_svc.c:474 #, fuzzy, c-format msgid "Failed to access local netconfig database: %s\n" msgstr "Konnte Quota nicht löschen: %s\n" #: rquota_svc.c:483 #, fuzzy, c-format msgid "Failed to create %s service.\n" msgstr "Kann keinen UDP-Dienst erzeugen.\n" #: rquota_svc.c:488 #, fuzzy, c-format msgid "Unable to register (RQUOTAPROG, RQUOTAVERS, %s).\n" msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, RQUOTAVERS, udp).\n" #: rquota_svc.c:494 #, fuzzy, c-format msgid "Unable to register (RQUOTAPROG, EXT_RQUOTAVERS, %s).\n" msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, EXT_RQUOTAVERS, udp).\n" #: rquota_svc.c:542 msgid "svc_run returned\n" msgstr "svc_run ist zurückgekehrt\n" #: set_limits_example.c:20 #, c-format msgid "copy_user_quota_limits: Failed to set userquota for uid %ld : %s\n" msgstr "" "copy_user_quota_limits: Benutzerquota für uid %ld setzen fehlgeschlagen: %s\n" #: set_limits_example.c:27 #, c-format msgid "copy_user_quota_limits: Failed to get userquota for uid %ld : %s\n" msgstr "" "copy_user_quota_limits: Benutzerquota für uid %ld holen fehlgeschlagen: %s\n" #: set_limits_example.c:43 #, fuzzy, c-format msgid "copy_group_quota_limits: Failed to set groupquota for gid %ld : %s\n" msgstr "" "copy_group_quota_limits: Gruppenquota für uid (gid?) %ld setzen " "fehlgeschlagen: %s\n" #: set_limits_example.c:50 #, fuzzy, c-format msgid "copy_group_quota_limits: Failed to get groupquota for gid %ld : %s\n" msgstr "" "copy_group_quota_limits: Gruppenquota für uid (gid?) %ld holen " "fehlgeschlagen: %s\n" #: svc_socket.c:75 #, c-format msgid "Unrecognized bind address family: %s\n" msgstr "" #: svc_socket.c:85 #, c-format msgid "Unrecognized bind address protocol: %s\n" msgstr "" #: svc_socket.c:95 #, c-format msgid "Unrecognized address semantics: %lu\n" msgstr "" #: svc_socket.c:103 #, fuzzy, c-format msgid "Failed to construct bind address: %s\n" msgstr "Kinnd bind-Operation zu gegebener Adresse nicht ausführen: %s\n" #: svc_socket.c:117 #, fuzzy, c-format msgid "Error creating socket: %s\n" msgstr "Konnte Socket nicht erzeugen: %s\n" #: svc_socket.c:124 #, fuzzy, c-format msgid "Cannot set IPv6 socket options: %s\n" msgstr "Konnte Socketoptionen nicht setzen: %s\n" #: svc_socket.c:131 #, c-format msgid "Cannot set socket options: %s\n" msgstr "Konnte Socketoptionen nicht setzen: %s\n" #: svc_socket.c:137 #, fuzzy, c-format msgid "Cannot bind to address: %s\n" msgstr "Kinnd bind-Operation zu gegebener Adresse nicht ausführen: %s\n" #: svc_socket.c:144 #, fuzzy, c-format msgid "Cannot listen to address: %s\n" msgstr "Kinnd bind-Operation zu gegebener Adresse nicht ausführen: %s\n" #: xqmstats.c:32 xqmstats.c:37 msgid "The running kernel does not support XFS\n" msgstr "Der laufende Kernel unterstützt kein XFS.\n" #: xqmstats.c:50 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "XFS-Quota-Manager dquot-Statistiken\n" #: xqmstats.c:51 #, c-format msgid " reclaims: %u\n" msgstr " reclaims: %u\n" #: xqmstats.c:52 #, c-format msgid " missed reclaims: %u\n" msgstr " missed reclaims: %u\n" #: xqmstats.c:53 #, c-format msgid " dquot dups: %u\n" msgstr " dquot dups: %u\n" #: xqmstats.c:54 #, c-format msgid " cache misses: %u\n" msgstr " cache misses: %u\n" #: xqmstats.c:55 #, c-format msgid " cache hits: %u\n" msgstr " cache hits: %u\n" #: xqmstats.c:56 #, c-format msgid " dquot wants: %u\n" msgstr " dquot wants: %u\n" #: xqmstats.c:57 #, c-format msgid " shake reclaims: %u\n" msgstr " shake reclaims: %u\n" #: xqmstats.c:58 #, c-format msgid " inact reclaims: %u\n" msgstr " inact reclaims: %u\n" #: xqmstats.c:63 #, c-format msgid "Maximum %u dquots (currently %u incore, %u on freelist)\n" msgstr "Maximum %u dquots (currently %u incore, %u on freelist)\n" #: edquota.c:50 #, fuzzy, c-format msgid "" "Usage:\n" "\tedquota %1$s[-u] [-F formatname] [-p username] [-f filesystem] " "username ...\n" "\tedquota %1$s-g [-F formatname] [-p groupname] [-f filesystem] " "groupname ...\n" "\tedquota %1$s-P [-F formatname] [-p projectname] [-f filesystem] " "projectname ...\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -T username|groupname|" "projectname ...\n" msgstr "" "Verwendung:\n" "\tedquota %1$s[-u] [-F formatname] [-p benutzername] [-f dateisystem] " "benutzername ...\n" "\tedquota %1$s-g [-F formatname] [-p gruppenname] [-f dateisystem] " "gruppenname ...\n" "\tedquota %1$s[-u|g] [-F formatname] [-f dateisystem] -t\n" "\tedquota %1$s[-u|g] [-F formatname] [-f dateisystem] -T benutzername|" "gruppenname ...\n" #: edquota.c:55 #, fuzzy msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" "-P, --project edit project data\n" msgstr "" "\n" "-u, --user Benutzerdaten bearbeiten\n" "-g, --group Gruppendaten bearbeiten\n" #: edquota.c:61 msgid "" "-r, --remote edit remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" "-r, --remote entferne Quota bearbeiten (über RPC)\n" "-m, --no-mixed-pathnames entferne führende Schrägstriche von NFSv4-" "Mountpunkten\n" #: edquota.c:64 msgid "" "-F, --format=formatname edit quotas of a specific format\n" "-p, --prototype=name copy data from a prototype user/group\n" " --always-resolve always try to resolve name, even if it is\n" " composed only of digits\n" "-f, --filesystem=filesystem edit data only on a specific filesystem\n" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace time of a user/group\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "-F, --format=formatname Quotas eines bestimmten Formats bearbeiten\n" "-p, --prototype=name Kopiere Daten von einem Vorlagenutzer/einer " "Vorlagegruppe\n" " --always-resolve Versuche stets, einen Namen aufzulösen, auch " "wenn er\n" " nur aus Ziffern besteht\n" "-f, --filesystem=filesystem Bearbeite nur Daten eines bestimmten " "Dateisystems\n" "-t, --edit-period Bearbeite Standard-Gnadenfrist\n" "-T, --edit-times Bearbeite Gradenfrist eines Nutzers/einer " "Gruppe\n" "-h, --help Zeige diesen Hilfetext and und beende das " "Programm\n" "-V, --version Zeige Versionsinformationen and und beende das " "Programm\n" "\n" #: edquota.c:159 msgid "" "Prototype name does not make sense when editing grace period or times.\n" msgstr "" "Die Angabe eines Vorlagenamens macht keinen Sinn, wenn Gnadenfrist oder " "Standard-Gnadenfrist bearbeitet werden soll.\n" #: edquota.c:163 #, fuzzy msgid "Cannot change grace times over RPC protocol.\n" msgstr "Kann Gnadenfristen nicht in Datei ablegen.\n" #: edquota.c:181 #, c-format msgid "Cannot get quota information for user %s\n" msgstr "Kann Quota-Informationen für Nutzer %s nicht erhalten\n" #: edquota.c:187 msgid "fsname mismatch\n" msgstr "Dateisystemname paßt nicht\n" #: edquota.c:231 msgid "No filesystems with quota detected.\n" msgstr "Keine Dateisysteme mit Quotainformationen gefunden.\n" #: edquota.c:247 #, c-format msgid "Cannot create temporary file: %s\n" msgstr "Kann temporäre Datei nicht anlegen: %s\n" #: edquota.c:252 #, c-format msgid "Cannot change owner of temporary file: %s\n" msgstr "Kann Eigentümer einer temporären Datei nicht ändern: %s\n" #: edquota.c:259 msgid "Cannot write grace times to file.\n" msgstr "Kann Gnadenfristen nicht in Datei ablegen.\n" #: edquota.c:264 edquota.c:283 edquota.c:316 edquota.c:335 #, fuzzy msgid "Cannot stat file with times.\n" msgstr "Kann keine Datei mit Einhängepunkten öffnen.\n" #: edquota.c:270 msgid "Error while editing grace times.\n" msgstr "Fehler beim Bearbeiten von Gnadenfristen.\n" #: edquota.c:281 edquota.c:333 #, fuzzy msgid "Cannot reopen!\n" msgstr "Kann Datei nicht zum wiederholten Male öffnen!" #: edquota.c:291 msgid "Failed to parse grace times file.\n" msgstr "Konnte Gnadenfristendatei nicht parsen.\n" #: edquota.c:301 #, c-format msgid "Cannot get quota information for user %s.\n" msgstr "Kann Quota-Informationen für Nutzer %s nicht erhalten.\n" #: edquota.c:304 msgid "Cannot write individual grace times to file.\n" msgstr "Kann einzelne Gnadenfristen nicht in Datei schreiben.\n" #: edquota.c:310 msgid "Cannot write quotas to file.\n" msgstr "Kann Quotainformationen nicht in Datei schreiben.\n" #: edquota.c:322 msgid "Error while editing quotas.\n" msgstr "Fehler beim Bearbeiten von Quotas.\n" #: edquota.c:344 msgid "Cannot read individual grace times from file.\n" msgstr "Kann einzelne Gnadenfristen nicht aus Datei lesen.\n" #: edquota.c:350 msgid "Cannot read quotas from file.\n" msgstr "Kann Quotas nicht aus Datei lesen.\n" #: quota.c:58 #, fuzzy msgid "Usage: quota [-guPqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "Verwendung: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" #: quota.c:59 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ...\n" msgstr "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F Quotaformat] -u Benutzername ...\n" #: quota.c:60 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ...\n" msgstr "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F Quotaformat] -g Gruppenname ...\n" #: quota.c:61 #, fuzzy msgid "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -P projectname ...\n" msgstr "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F Quotaformat] -g Gruppenname ...\n" #: quota.c:62 #, fuzzy msgid "\tquota [-qvswugPQm] [-F quotaformat] -f filesystem ...\n" msgstr "\tquota [-qvswugQm] [-F Quotaformat] -f Dateisystem ...\n" #: quota.c:63 #, fuzzy msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-P, --project display quota for project\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" " --always-resolve always try to translate name to id, even if it " "is\n" "\t\t\t composed of only digits\n" "-w, --no-wrap do not wrap long lines\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-l, --local-only do not query NFS filesystems\n" "-Q, --quiet-refuse do not print error message when NFS server " "does\n" " not respond\n" "-i, --no-autofs do not query autofs mountpoints\n" "-F, --format=formatname display quota of a specific format\n" "-f, --filesystem-list display quota information only for given\n" " filesystems\n" " --filesystem=path display quota information only for given\n" " filesystem, remaining command line arguments\n" " are still treated as user/group/project names\n" "-A, --all-nfs display quota for all NFS mountpoints\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" " --show-mntpoint show mount point of the file system in output\n" " --hide-device do not show file system device in output\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "\n" "-u, --user Quota für Nutzer anzeigen\n" "-g, --group Quota für Gruppe anzeigen\n" "-q, --quiet Kürzere Nachricht ausgeben\n" "-v, --verbose Ausführlichere Nachricht ausgeben\n" "-s, --human-readable Zeige Zahlen in menschenfreundlichen Einheiten an " "(MB, GB...)\n" " --always-resolve Versuche immer, Namen in Benutzerids umzuwandeln, " "sogar wenn\n" "\t\t\t der Name nur aus Ziffern besteht\n" "-w, --no-wrap Lange Zeilen nicht umbrechen\n" "-p, --raw-grace Gnadenfrist in Sekunden seit der Epoche ausgeben\n" "-l, --local-only NFS-Dateisysteme nicht abfragen\n" "-Q, --quiet-refuse Keine Fehlermeldung ausgeben, wenn ein NFS-Server\n" " nicht antwortet\n" "-i, --no-autofs Autofs-Mountpunkte nicht abfragen\n" "-F, --format=formatname Quotas für ein bestimmtes Format anzeigen\n" "-f, --filesystem-list Quota-Informationen nur für die gegebenen " "Dateisysteme anzeigen\n" "-A, --nfs-all Quotas für alle NFS-Mountpunkte ausgeben\n" "-m, --no-mixed-pathnames Entferne führende Schrägstriche von NFSv4-" "Mountpunkten\n" "-h, --help Diese Hilfenachricht ausgeben und beenden\n" "-V, --version Versionsinformation ausgeben und beenden\n" "\n" #: quota.c:103 msgid "space" msgstr "Platz" #: quota.c:105 msgid "blocks" msgstr "Blöcke" #: quota.c:107 #, c-format msgid "Disk quotas for %s %s (%cid %u): %s\n" msgstr "Dateisystemquotas für %s %s (%cid %u): %s\n" #: quota.c:110 msgid "Filesystem" msgstr "Dateisystem" #: quota.c:111 quota.c:112 msgid "quota" msgstr "Quota" #: quota.c:111 quota.c:112 msgid "limit" msgstr "Limit" #: quota.c:111 quota.c:112 msgid "grace" msgstr "Gnadenfrist" #: quota.c:112 msgid "files" msgstr "Dateien" #: quota.c:193 msgid "File limit reached on" msgstr "Dateilimit erreicht auf" #: quota.c:199 msgid "In file grace period on" msgstr "In der Dateignadenfrist auf" #: quota.c:203 msgid "Over file quota on" msgstr "Über dem Dateiquota auf" #: quota.c:209 msgid "Block limit reached on" msgstr "Blocklimit erreicht auf" #: quota.c:215 msgid "In block grace period on" msgstr "In der Blockgnadenfrist auf" #: quota.c:219 msgid "Over block quota on" msgstr "Über dem Blockquota auf" #: quota.c:282 msgid "no limited resources used" msgstr "" #: quota.c:390 #, fuzzy msgid "Not enough memory for filesystem names" msgstr "Nicht genug Speicher.\n" #: quota.c:407 #, c-format msgid "Warning: Ignoring -%c when filesystem list specified.\n" msgstr "Warnung: Ignoriere -%c, wenn eine Dateisystemliste angegeben wurde.\n" #: quota.c:416 msgid "No filesystem specified.\n" msgstr "Kein Dateisystem angegeben.\n" #: quota.c:424 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "Gid-set-Speicheranforderung (ngroups=%d): %s\n" #: quota.c:430 #, c-format msgid "getgroups(): %s\n" msgstr "getgroups(): %s\n" #: quota.c:435 #, fuzzy msgid "Project reports not supported without project name\n" msgstr "Quotaformat wird vom Kernel nicht unterstützt.\n" #: common.c:129 #, c-format msgid "Quota utilities version %s.\n" msgstr "Quota-Hilfsprogramme Version %s.\n" #: common.c:130 #, c-format msgid "Compiled with:%s\n" msgstr "Compiliert mit:%s\n" #~ msgid "Line %d too long. Truncating.\n" #~ msgstr "Zeile %d zu lang. Schneide sie ab.\n" #~ msgid "Error in config file (line %d), ignoring\n" #~ msgstr "Fehler in Konfigurationsdatei (Zeile %d). Ignoriere.\n" #~ msgid "Possible error in config file (line %d), ignoring\n" #~ msgstr "Möglicher Fehler in Konfigurationsdatei in Zeile %d. Ignoriere.\n" #~ msgid "Cannot duplicate descriptor of file to write to: %s\n" #~ msgstr "Kann Dateideskriptor nicht zum Schreiben duplizieren: %s\n" #~ msgid "Cannot duplicate descriptor of temp file: %s\n" #~ msgstr "Kann Dateideskriptor einer temporären Datei nicht duplizieren: %s\n" #~ msgid "Cannot duplicate descriptor of file to edit: %s\n" #~ msgstr "" #~ "Kann Dateideskriptor der zu bearbeitenden Datei nicht duplizieren: %s\n" #, fuzzy #~ msgid "cannot create TCP service.\n" #~ msgstr "Kann keinen UDP-Dienst erzeugen.\n" #, fuzzy #~ msgid "unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n" #~ msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, RQUOTAVERS, udp).\n" #, fuzzy #~ msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" #~ msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, EXT_RQUOTAVERS, udp).\n" #~ msgid "Error while editing individual grace times.\n" #~ msgstr "Fehler bei Bearbeitung einzelner Gnadenfristen.\n" #~ msgid "" #~ "LDAP library does not support ldap_initialize() but URI is specified." #~ msgstr "" #~ "LDAP-Bibliothek unterstützt ldap_initialize() nicht, aber ein URI wurde " #~ "angegeben." #~ msgid "XFS quota format needs no checking.\n" #~ msgstr "XFS-Quotaformat erfordert keine Prüfung.\n" #~ msgid "Cannot stat old %s quota file: %s\n" #~ msgstr "Kann stat() für alte %s-Quotadatei aufrufen: %s\n" #~ msgid "Operation not supported for filesystems with hidden quota files!\n" #~ msgstr "" #~ "Operation bei Dateisystemen mit versteckten Quotadateien nicht " #~ "unterstützt!\n" #~ msgid "Quotas for %s %s:\n" #~ msgstr "Quotas für %s %s:\n" #~ msgid "%s %d, limits (soft = %d, hard = %d)\n" #~ msgstr "%s %d, Limits (weich = %d, hart = %d)\n" #~ msgid "blocks in use:" #~ msgstr "Blöcke verwendet:" #~ msgid "\tinodes in use:" #~ msgstr "\tInodes verwendet:" #~ msgid "%s - bad format\n" #~ msgstr "%s - falsches Format\n" #~ msgid "%s - %s -- bad format\n" #~ msgstr "%s - %s -- falsches Format\n" #~ msgid " blocks in use: %llu, limits (soft = %llu, hard = %llu)" #~ msgstr " Blöcke verwendet: %llu, Limits (weich = %llu, hart = %llu)" #~ msgid "%s - %s -- bad format\n" #~ msgstr "%s - %s -- falsches Format\n" #~ msgid "\tinodes in use: %llu, limits (soft = %llu, hard = %llu)" #~ msgstr "\tInodes verwendet: %llu, Limits (weich = %llu, hart = %llu)" #~ msgid "block grace period: %s, file grace period: %s\n" #~ msgstr "Blockgnadenfrist: %s, Dateignadenfrist: %s\n" #~ msgid " block grace period: %d %s file grace period: %d %s" #~ msgstr " Blockgnadenfrist: %d %s Dateignadenfrist: %d %s" #~ msgid "Cannot find device of loopback mount in options for %s. Skipping.\n" #~ msgstr "" #~ "Kann Gerät des Loopback-Mounts in den Optionen für %s nicht finden. " #~ "Überspringe.\n" #~ msgid "Cannot stat() loopback device %s: %s\n" #~ msgstr "stat() für Loopbackgerät %s fehlgeschlagen: %s\n" #~ msgid "Loopback device %s is not block device!\n" #~ msgstr "Loopbackgerät %s ist kein Blockgerät!\n" #~ msgid "cannot create tcp service.\n" #~ msgstr "Kann keinen TCP-Dienst erzeugen.\n" #~ msgid "unable to register (RQUOTAPROG, RQUOTAVERS, tcp).\n" #~ msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, RQUOTAVERS, tcp).\n" #~ msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, tcp).\n" #~ msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, EXT_RQUOTAVERS, tcp).\n" #~ msgid "Bad number of arguments." #~ msgstr "Falsche Anzahl an Argumenten." #~ msgid "Too new quotafile format on %s\n" #~ msgstr "Zu neues Quotadateiformat auf Dateisystem %s\n" #~ msgid "Unknown format" #~ msgstr "Unbekanntes Format" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/en@boldquot.header��������������������������������������������������������������������0000664�0000000�0000000�00000002471�14463210551�0016650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 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. # �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/en@quot.header������������������������������������������������������������������������0000664�0000000�0000000�00000002263�14463210551�0016006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 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. # ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/fr.gmo��������������������������������������������������������������������������������0000664�0000000�0000000�00000064306�14463210551�0014342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��3�� ��������@������� ������K���]��Y�����C��������G�����^�����u���������������������������B����� ���B�����L�����S�����s������������������������������"�����@�����]�����d�� ���l�� ���v��&�����&����������2����� ��� ��&���+��9���R��8�����-�����G��������;�����K��!���e������� �����+���������� ����� �����#�����A���*��.���l��9�����&�����<�����8���9��(���r��1�����!�����O�����*���?�����j������������V���K��.�����)�����8�����1���4 �����f ����� ��T��� ��S��� ��$���M!�����r!�����!�����!��%���!��.���!�� ���"�����#"�����="��$���W"��!���|"�����"�����"��=���"��!���#�����2#�����Q#��!���q#�����#��9���#��5���#��!��� $��0���B$��%���s$�����$��"���$�����$�����$�� ���$��L��� %�����W%�����q%�����%�����%��#���%��3���%�����&�����&��2���1&�����d&��}���&��n���n'��(���'�����(�����(�� ���7(��2���D(�����w(�����(�����(�� ���(��,���(��8���)��1���;)�����m)��(���)��)���)��!���)��$���)��/���"*�����R*��1���f*�� ���*�� ���*�����*�����*�����+�����0+�����M+��1���i+�����+�����+�����+�����+��4���+��4��� ,�����A,�����U,��G���h,��6���,��*���,��O���-�����b-��,���-��&���.��D���:.�����.�����.�����.�����.�����.�����/��,���1/�����^/��1���p/��X���/��P���/�����L0��2���^0��;���0��/���0��J���0��(���H1��4���q1��0���1��1���1��2��� 2��2���<2��(���o2��$���2�����2�����2��5���2��5���3��.���D3��)���s3��8���3��$���3��#���3��*���4��X���J4�����4�����4��A���4��A���4�����>5�����D5��$���a5��%���5�����5��7���5�����5�����5��5���6��1���76�����i6�����o6�����t6�� ���6�����6�����6�����6�����6�����6�����7�����7�����07�����67��,��O7��E���|8��?��8����;��M���<��[���@=��G���=�����=�����=�����>�����5>�����P>�����k>�����>�����>��E���>�� ���?����� ?��!���?��!���5?�����W?�����w?�����?�����?��"���?�����?��!��� @�����,@�����3@�� ���;@�� ���E@��6���O@��0���@�����@��8���@�����@��,���A��M���EA��@���A��@���A��e���B�����{B�����B��,���B�����B�� ���B��;����C�����<C�����UC�����lC��1���C��\���C��E���D��[���ZD��@���D��U���D��X���ME��B���E��@���E��9���*F��x���dF��C���F��'���!G��1���IG����{G�����H��B���I��@���DI��\���I��D���I��2���'J��=���ZJ��}���J��y���K��&���K��2���K��6���K�����!L��(���4L��8���]L�����L�����L�����L��7���L��%���M��.���DM�����sM��]���M��&���M��$��� N��-���2N��4���`N��+���N��S���N��I���O��,���_O��B���O��8���O��(���P��8���1P�� ���jP�����P�����P��O���P��1���Q��-���:Q�����hQ�����Q��4���Q��:���Q����� R�����R��D���(R�����mR�����S�����S��-���8T�����fT��"���T�����T��9���T�����T��#��� U��#���1U�� ���UU��@���`U��?���U��M���U�����/V��7���OV��2���V��)���V��.���V��A���W�����UW��3���lW�����W��#���W�����W�����X�����"X�����BX�����bX��<���X��*���X�� ���X�����X�����X��K���Y��K���aY�����Y��!���Y��W���Y��Y���FZ��?���Z��q���Z�����R[��*���\��5���:\��c���p\�����\��,���\��-���!]�����O]��'���n]��*���]��5���]�����]��@��� ^��t���M^��b���^�����%_��1���@_��Q���r_��A���_��b���`��2���i`��Q���`��E���`��N���4a��O���a��H���a��,���b��(���Ib�����rb�� ���b��H���b��I���b��@���.c��F���oc��O���c��I���d��1���Pd��@���d��|���d�����@e�����We��_���]e��Z���e�����f��&���!f��5���Hf��3���~f�����f��O���f����� g�����"g��@���)g��C���jg�����g�����g��%���g�� ���g�����g�����g�����h�����%h��(���=h�����fh��#���yh�����h��#���h���������������������������������h���$������k�������������,����������������S������3������B����������������b�������O������Z�������i���u���������s�������`������������?��������������������p���������t���[���d����������=���%������E������P������� ���������������������V������C�����������������������������������������������F������g��������������������9���������7�����������������T���6���_����������L������5����������e�������z�����������������a���D���+���������������������!���R������������(���H����������������������������������������������x���������� ������������������@��������������������������������>���o��������������������������������� ���"����������&���c���Y�����������������J���������������������.���������I���]���/������*������N����������������������W���l������1�����������|����������G���-���0������w��������������������������q�������A�������������j������8������:���M������ ������U�������������)������v�����������f�������������\���'��������������^���4���;������������������������n�������������r���m������X������������������}�������{���~�������<������#������ �������2���y��������� ���K�����������������Q���� Block limits File limits � Please cleanup the group data before the grace period expires. Basically, this means that the system thinks group is using more disk space on the above partition(s) than it is allowed. If you do not delete files and get below group quota before the grace period expires, the system will prevent you and other members of the group from creating new files owned by the group. For additional assistance, please contact us at %s or via phone at %s. � We hope that you will cleanup before your grace period expires. Basically, this means that the system thinks you are using more disk space on the above partition(s) than you are allowed. If you do not delete files and get below your quota before the grace period expires, the system will prevent you from creating new files. For additional assistance, please contact us at %s or via phone at %s. � Filesystem block grace inode grace � Filesystem blocks soft hard inodes soft hard � Filesystem Block grace period Inode grace period � cache hits: %u � cache misses: %u � dquot dups: %u � dquot wants: %u � inact reclaims: %u � missed reclaims: %u � reclaims: %u � shake reclaims: %u �%-9s used soft hard grace used soft hard grace �%02d:%02d�%ddays�%s (gid %d): Permission denied �%s (uid %d): Permission denied �%s [%s]: %s quotas turned off �%s [%s]: %s quotas turned on �%s: %s quotas turned off �%s: %s quotas turned on �%s: %s root_squash turned off �%s: %s root_squash turned on �%s: deleted %s quota blocks �%udays�%uhours�%uminutes�%useconds�*** Report for %s quotas on device %s �*** Status for %s quotas on device %s �0seconds�Accounting [ondisk]: %s; Enforcement [ondisk]: %s �Accounting: %s; Enforcement: %s �Adding dquot structure type %s for %d �Administrator for a group %s not found. Cancelling mail. �Allocated %d bytes memory Free'd %d bytes Lost %d bytes �As you wish... Canceling check of this file. �Bad file magic or version (probably not quotafile with bad endianity). �Bad format: %s �Bad number of arguments. �Block %u in tree referenced twice�Block %u is truncated. �Block %u: �Block grace time: %s; Inode grace time: %s �Block limit reached on�Bugs to %s �Bugs to: %s �Cannot change permission of %s: %s �Cannot delete %s quota on %s - switch quota accounting off first �Cannot find checked quota file for %ss on %s! �Cannot find quota file on %s [%s] to turn quotas on/off. �Cannot finish IO on new quotafile: %s �Cannot get exact used space... Results might be inaccurate. �Cannot get info for %s quota file from kernel on %s: %s �Cannot get name of old quotafile on %s. �Cannot get quota for %s %d from kernel on %s: %s �Cannot get quotafile name for %s �Cannot guess format from filename on %s. Please specify format on commandline. �Cannot initialize IO on new quotafile: %s �Cannot open file %s: %s �Cannot open quotafile %s: %s �Cannot remount filesystem mounted on %s read-only so counted values might not be right. Please stop all programs writing to filesystem or use -m flag to force checking. �Cannot remount filesystem mounted on %s read-only. Counted values might not be right. �Cannot rename new quotafile %s to name %s: %s �Cannot rename old quotafile %s to %s: %s �Cannot set info for %s quota file from kernel on %s: %s �Cannot set quota for %s %d from kernel on %s: %s �Cannot set socket options: %s �Cannot stat mountpoint %s: %s �Cannot turn %s quotas off on %s: %s Kernel won't know about changes quotacheck did. �Cannot turn %s quotas on on %s: %s Kernel won't know about changes quotacheck did. �Checked %d directories and %d files �Checking quotafile headers... �Checking quotafile info... �Corrupted blocks: �Corrupted number of used entries (%u)�Creation of %s quota format is not supported. �Data dumped. �Denied access to host %s �Detected quota format %s �Disabling %s quota accounting on %s �Disk quotas for %s %s (%cid %d): �Dumping gathered data for %ss. �Duplicated entries.�Enabling %s quota on root filesystem (reboot to take effect) �Enforcing %s quota already on %s �Entry for id %u is truncated. �Error checking device name: %s �Error while editing grace times. �Error while editing quotas. �Error while getting old quota statistics from kernel: %s �Error while getting quota statistics from kernel: %s �Error while releasing file on %s �Error while searching for old quota file %s: %s �Error while syncing quotas on %s: %s �Failed to delete quota: %s �Failed to parse grace times file. �File info done. �File limit reached on�Filesystem�Filesystem used soft hard grace used soft hard grace �Filesystem remounted RW. �Filesystem remounted read-only �First entry loaded. �Found an invalid UUID: %s �Going to check %s quota file of %s �Grace period before enforcing soft limits for %ss: �Group�Headers checked. �Headers of file %s checked. Going to load data... �Hi, We noticed that the group %s you are member of violates the quotasystem used on this system. We have found the following violations: �Hi, We noticed that you are in violation with the quotasystem used on this system. We have found the following violations: �ID %u has more structures. User intervention needed (use -i for interactive mode or -n for automatic answer). �Illegal free block reference to block %u�In block grace period on�In file grace period on�Inode: none �Inserting already present quota entry (block %u). �Invalid argument "%s" �Kernel quota version: %u.%u.%u �Kernel quota version: old �Leaving %s �Loading first quota entry with grace times. �Maximum %u dquots (currently %u incore, %u on freelist) �Maybe create new quota files with quotacheck(8)? �Mountpoint not specified. �Name must be quotaon or quotaoff not %s �Name of quota file too long. Contact %s. �No correct mountpoint specified. �No filesystems with quota detected. �Not all specified mountpoints are using quota. �Not enough memory. �Not found any corrupted blocks. Congratulations. �Number of allocated dquots: %ld �Number of dquot cache hits: %ld �Number of dquot drops: %ld �Number of dquot lookups: %ld �Number of dquot reads: %ld �Number of dquot writes: %ld �Number of free dquots: %ld �Number of in use dquot entries (user/group): %ld �Number of quotafile syncs: %ld �OFF�ON�Old file not found. �Only RPC quota format is allowed on NFS filesystem. �Only XFS quota format is allowed on XFS filesystem. �Over block quota on�Over file quota on�Parse error at line %d. Trailing characters after administrators name. �Prototype user has no sense when editing grace times. �Quota file not found or has wrong format. �Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file. �Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file. Please turn quotas off or use -f to force checking. �Quota for id %u referenced but not present. �Quota format not supported in kernel. �Quota structure has offset to other block (%u) than it should (%u). �Quota utilities version %s. �Quota write failed (id %u): %s �RPC quota format not compiled. �Reference to illegal block %u�Renaming new quotafile �Renaming old quotafile to %s~ �Required format %s not supported by kernel. �Scanning %s [%s] �Scanning stored directories from directory stack �Setting grace times and other flags to default values. Assuming number of blocks is %u. �Size of file: %lu Blocks: %u Free block: %u Block with free entry: %u Flags: %x �Skipping %s [%s] �Something weird happened while scanning. Error %d �Specified both -n and -t but only one of them can be used. �Specified path %s is not directory nor device. �Statistics: Total blocks: %u Data blocks: %u Entries: %u Used average: %f �The running kernel does not support XFS �Time units may be: days, hours, minutes, or seconds �Times to enforce softlimit for %s %s (%cid %d): �Trying to write info to readonly quotafile on %s �Trying to write info to readonly quotafile on %s. �Trying to write quota to readonly quotafile on %s �Unexpected XFS quota state sought on %s �Unknown action should be performed. �Unknown option '%c'. �User�WARNING - %s: cannot change current block allocation �WARNING - %s: cannot change current inode allocation �WARNING - Quota file %s has corrupted headers �WARNING - Quota file info was corrupted. �WARNING - Some data might be changed due to corruption. �Warning: Mailer exitted abnormally. �XFS Quota Manager dquot statistics �XFS quota allowed only on XFS filesystem. �Your quota file is stored in wrong endianity. Please use convertquota(8) to convert it. �bad format: %s �blocks�copy_user_quota_limits: Failed to get userquota for uid %ld : %s �copy_user_quota_limits: Failed to set userquota for uid %ld : %s �done �error (%d) while opening %s �error (%d) while opening inode scan �error (%d) while starting inode scan �files�find_free_dqentry(): Data block full but it shouldn't. �fsname mismatch �grace�host %s attempted to call setquota from port >= 1024 �host %s attempted to call setquota when disabled �limit�none�popd %s Entering directory %s �pushd %s/%s �quota�quotactl on %s [%s]: %s �quotactl on %s: %s �quotactl() on %s: %s �set root_squash on %s: %s �svc_run returned �unable to free arguments �unset�using %s on %s [%s]: %s �Project-Id-Version: 1 Report-Msgid-Bugs-To: jack@suse.cz PO-Revision-Date: 2003-02-21 22:43+0100 Last-Translator: Jrme Schell <jerome@myreseau.org> Language-Team: French <traduc@traduc.org> Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit � Limites bloc Limites fichiers � Veuillez faire de la place dans les donnes du groupe avant que la priode de sursis n'expire. En clair, tout cela signifie que le systme pense que le groupe utilise plus d'espace disque qu'il n'est autoris sur la (les) partition(s) ci-dessus. Si vous n'effacez pas de fichiers pour passer en-dessous du quota du groupe avant que la priode de sursis expire, le systme vous empchera, vous ainsi qu'aux autres membres du groupe, de crer de nouveaux fichiers appartenant ce groupe. Pour plus de renseignements, veuillez nous contacter au %s ou par tlphone au %s. � Nous esprons que vous ferez de la place avant que votre priode de sursis n'expire. En clair, tout cela signifie que le systme pense que vous utilisez plus d'espace disque qu'il ne vous est autoris sur la (les) partition(s) ci-dessus. Si vous n'effacez pas de fichiers pour passer en-dessous de votre quota avant que votre priode de sursis expire, le systme vous empchera de crer de nouveaux fichiers. Pour plus de renseignements, veuillez nous contacter au %s ou par tlphone au %s. � Systme de fichiers sursis bloc sursis inode � Systme de fichiers blocs souple stricte inodes souple stricte � Systme de fichiers priode de sursis bloc priode de sursis inode � succs cache : %u � dfaut de cache : %u � dquot en double : %u � besoins dquot : %u � demandes inactives : %u � demandes manques : %u � demandes : %u � demandes entames : %u �%-9s utilis souple stricte sursis utilis souple stricte sursis �%02d:%02d�%ddays�%s (gid %d) : permission refuse �%s (uid %d) : permission refuse �%s [%s] : quotas %s dsactivs �%s [%s] : quotas %s activs �%s : quotas %s dsactivs �%s : quotas %s activs �%s : %s root_squash dsactiv �%s : %s root_squash activ �%s : blocs des quotas %s effacs �%udays�%uhours�%uminutes�%useconds�*** Rapport pour les quotas %s sur le priphrique %s �*** Statut des quotas %s sur le priphrique %s �0seconds�Compte [sur disque] : %s ; En vigueur [sur disque] : %s �Compte : %s ; En vigueur : %s �Ajout d'une structure dquot type %s pour %d �Administrateur pour le groupe %s non trouv. Abandon de l'envoi du courrier. �%d octets de mmoire allous %d octets librs %d octets perdus �Suivant vos dsirs... Abandon de la vrification de ce fichier. �Mauvais type ou version de fichier (probablement pas un fichier de quotas avec endianess incorrect). �Format incorrect : %s �Mauvais nombre d'arguments. �Deux rfrences dans l'arbre pour le bloc %u�Le bloc %u est tronqu. �Bloc %u : �Priode de sursis bloc : %s ; priode de sursis inode : %s �Limite de blocs atteinte�Rapports de bugs %s �Rapports de bugs : %s �Impossible de changer les permissions de %s : %s �Impossible d'effacer les quotas %s sur %s - supprimez d'abord la prise en compte des quotas �Impossible de trouver le fichier de quotas vrifi pour %ss sur %s ! �Impossible de trouver le fichier de quotas sur %s [%s] pour activer/dsactiver les quotas. �Impossible de terminer ES sur le nouveau fichier de quotas : %s �Impossible d'obtenir l'espace exact utilis... Les rsultats risque d'tre imprcis. �Impossible d'obtenir du noyau les informations pour le fichier de quotas %s sur %s : %s �Impossible d'obtenir le nom de l'ancien fichier de quotas sur %s. �Impossible d'obtenir du noyau les quotas pour %s %d sur %s : %s �Impossible d'obtenir le nom du fichier de quotas pour %s �Impossible de deviner le format d'aprs le nom de fichier sur %s. Veuillez prciser le format sur la ligne de commande. �Initialisation ES impossible sur le nouveau fichier de quotas : %s �Impossible d'ouvrir le fichier %s : %s �Impossible d'ouvrir le fichier de quotas %s : %s �Impossible de remonter le systme de fichier mont sur %s en lecture seule, les valeurs comptabilises riquent d'tre fausses. Veuillez interrompre tous les programmes qui crivent sur ce systme de fichiers ou utilisez l'option -m pour forcer la vrification. �Impossible de remonter le systme de fichier mont sur %s en lecture seule. Les valeurs comptabilises riquent d'tre fausses. �Impossible de renommer le nouveau fichier de quotas %s en %s : %s �Impossible de renommer l'ancien fichier de quotas %s en %s : %s �Impossible de fixer dans le noyau les informations pour le fichier de quotas %s sur %s : %s �Impossible de fixer les quotas dans le noyau pour %s %d sur %s : %s �Impossible de fixer les options de la socket : %s �Impossible d'excuter stat() sur le point de montage %s : %s �Impossible de dsactiver les quotas %s sur %s : %s Le noyau ne sera pas inform des modifications que quotacheck a effectu. �Impossible d'activer les quotas %s sur %s : %s Le noyau ne sera pas inform des modifications que quotacheck a effectu. �Vrifi %d rpertoires et %d fichiers �Vrification des en-ttes du fichier de quotas... �Vrification des informations du fichier de quotas... �Blocs corrompus : �Nombre d'entres utilises corrompu (%u)�La cration de quotas au format %s n'est pas supporte. �Donnes dcharges. �Accs refus la machine %s �Format de quotas dtect %s �Suppression de la prise en compte des quotas %s sur %s �Quotas disque pour %s %s (%cid %d) : �Dchargement des donnes rcupres pour %ss. �Entres redondantes.�Activation des quotas %s sur le systme de fichiers racine (redmarrez pour prise en compte) �Application des quotas %s dj sur %s �L'entre pour l'id %u est tronque. �Erreur vrification nom de priphrique : %s �Erreur lors de la modification des temps de sursis. �Erreur lors de la modification des quotas. �Erreur lors de la rcupration des anciennes statistiques des quotas du noyau : %s �Erreur lors de la rcupration des statistiques des quotas du noyau : %s �Erreur lors de la libration fichier sur %s �Erreur lors de la recherche de l'ancien fichier de quotas %s : %s �Erreur lors de la synchronisation des quotas sur %s: %s �chec de la suppression des quotas : %s �chec lors de l'analyse du fichier des temps de sursis. �Informations fichier termines. �Limite de fichiers atteinte�Systme fichiers�Systme fichiers utilis souple stricte sursis utilis souple stricte sursis �Systme de fichiers remont en lecture-criture. �Systme de fichiers remont en lecture seule �Premire entre charge. �UUID invalide trouv : %s �Sur le point de vrifier %s fichier de quotas de %s �Sursis avant l'application des limites souples pour %ss : �Groupe�En-ttes vrifis. �En-ttes du fichier %s vrifis. Chargement des donnes imminent... �Bonjour, Il semblerait que le groupe %s dont vous tes membre soit en violation avec le mcanisme de quotas utilis sur ce systme. Voici les dpassements relevs : �Bonjour, Il semblerait que vous soyez en violation avec le mcanisme de quotas utilis sur ce systme. Voici les dpassements relevs : �L'ID %u possde plus de structures. Intervention de l'utilisateur ncessaire (utilisez -i pour le mode interactif ou -n pour une rponse automatique). �Rfrence bloc libre illgale vers le bloc %u�Priode de sursis blocs active�Priode de sursis fichiers active�Inode : aucun �Insertion d'une entre de quota dj prsente (bloc %u). �Argument incorrect %s �Version quotas du noyau : %u.%u.%u �Version quotas du noyau : ancienne �Quitte %s �Chargement de la premire entre de quota avec temps de sursis. �Maximum %u dquots (actuellement %u inclus, %u sur liste libre) �Essayez peut-tre de crer un nouveau fichier de quotas avec quotacheck(8) ? �Point de montage non spcifi. �Le nom doit tre quotaon ou quotaoff et non %s �Nom du fichier de quotas trop long. Contactez %s. �Aucun point de montage correct spcifi. �Aucun systme de fichier avec quotas dtect. �Les points de montage spcifis n'utilisent pas tous les quotas. �Pas assez de mmoire. �Aucun bloc corrompu n'a t trouv. Flicitations. �Nombre de dquots allous : %ld �Nombre de succs cache dquot : %ld �Nombre de rejets dquot : %ld �Nombre de requtes dquot : %ld �Nombre de lectures dquot : %ld �Nombre d'critures dquot : %ld �Nombre de dquots libre : %ld �Nombre d'entres dquot utilises (utilisateur/groupe) : %ld �Nombre de synchro fichier de quotas : %ld �DESACTIV�ACTIV�Ancien fichier non trouv. �Sur un systme de fichiers NFS, seul le format de quotas RPC est autoris. �Sur un systme de fichiers XFS, seul le format de quotas XFS est autoris. �Quota dpassement blocs activ�Quota dpassement fichiers activ�Erreur d'analyse la ligne %d. Caractres parasites aprs le nom des administrateurs. �Un prototype d'utilisateur n'a pas lieu d'tre pour la modification des temps de sursis. �Le fichier de quotas est introuvable ou n'a pas le bon format. �Les quotas pour %ss sont actif sur le point de montage %s si bien que quotacheck risque d'endommager le fichier. �Les quotas pour %ss sont actif sur le point de montage %s si bien que quotacheck risque d'endommager le fichier. Veuillez dsactiver les quotas ou utiliser -f pour forcer la vrification. �Quota pour l'id %u rfrenc mais absent. �Ce format de quotas n'est pas support par le noyau. �La structure du quota comporte un dcalage vers un autre bloc (%u) que celui qu'elle devrait (%u). �Utilitaires quotas version %s. �chec de l'criture des quotas (id %u) : %s �Le format de quotas RPC n'a pas t compil. �Rfrence un bloc illgal %u�Renommage du nouveau fichier de quotas �Renomme l'ancien fichier de quotas en %s~ �Le format requis %s n'est pas support par le noyau. �Parcours de %s [%s] �Parcours des rpertoires stocks depuis la pile des rpertoires �Rglage des temps de sursis et autres drapeaux aux valeurs par dfaut. Considre le nombre de blocs comme tant %u. �Taille du fichier : %lu Blocs : %u Blocs libres : %u Blocs avec entres libres : %u Drapeaux : %x �Non traitement de %s [%s] �vnement inattendu lors de l'analyse. Erreur %d �Spcification de -n et -t alors qu'un seul des deux peut tre utilis la fois. �Le chemin spcifi %s n'est ni un rpertoire ni un priphrique. �Statistiques : Total des blocs : %u Blocs de donnes : %u Entres : %u Moyenne d'utilisation : %f �Le noyau en cours d'excution de supporte pas XFS �Units de temps peuvent tre : days (jours), hours (heures), minutes, ou seconds �Temps avant l'application de la limite souple pour %s %s (%cid %d) : �Tentative d'criture des informations dans un fichier en lecture seule sur %s �Tentative d'criture des informations dans un fichier en lecture seule sur %s. �Tentative d'criture des quotas dans un fichier en lecture seule sur %s �tat des quotas XFS inattendu trouv sur %s �Une action inconnue doit tre excute. �Option non reconnue %c . �Utilisateur�ATTENTION - %s : impossible de modifier l'allocation actuelle des blocs �ATTENTION - %s : impossible de modifier l'allocation actuelle des inodes �ATTENTION - Les en-ttes du fichier de quotas %s sont corrompus �ATTENTION - Les informations du fichier de quotas ont t corrompues. �ATTENTION - Certaines donnes risquent d'tre modifies suite la corruption. �Attention : le client de messagerie s'est termin de manire inattendue. �Statistiques dquot du gestionnaire de quotas XFS �Quotas XFS autoriss uniquement sur un systme de fichiers XFS. �Votre fichier de quotas est stock avec un ordre des octets incorrect. Veuillez utiliser convertquota(8) pour le convertir. �format incorrect : %s �blocs�copy_user_quota_limits : chec dans la rcupration des quotas utilisateur pour l'uid %ld : %s �copy_user_quota_limits : chec dans le rglage des quotas utilisateur pour l'uid %ld : %s �termin �erreur (%d) lors de l'ouverture de %s �erreur (%d) lors de l'ouverture de l'analyse d'inode �erreur (%d) lors du dmarrage de l'analyse d'inode �fichiers�find_free_dqentry() : bloc de donnes plein alors qu'il ne devrait pas l'tre. �Incohrence de fsname �sursis�La machine %s a tent d'appeler setquota depuis un port >= 1024 �La machine %s a tent d'appeler setquota alors qu'il est dsactiv �limite�aucun�popd %s Entre dans le rpertoire %s �pushd %s/%s �quota�quotactl sur %s [%s] : %s �quotactl sur %s : %s �quotactl() sur %s : %s �Positionnez root_squash sur %s : %s �Retour de svc_run �Imposible de librer les arguments �vide�utilisation de %s sur %s [%s] : %s ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/fr.po���������������������������������������������������������������������������������0000664�0000000�0000000�00000305263�14463210551�0014176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# French translation of quota-tools. # Copyright (C) 2003 Free Software Foundation, Inc. # Jrme Schell <jerome@myreseau.org>, 2003. # msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: jack@suse.cz\n" "POT-Creation-Date: 2022-09-16 13:08+0200\n" "PO-Revision-Date: 2003-02-21 22:43+0100\n" "Last-Translator: Jrme Schell <jerome@myreseau.org>\n" "Language-Team: French <traduc@traduc.org>\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: bylabel.c:274 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "UUID invalide trouv : %s\n" #: bylabel.c:294 #, c-format msgid "Error checking device name: %s\n" msgstr "Erreur vrification nom de priphrique : %s\n" #: convertquota.c:41 #, c-format msgid "" "Utility for converting quota files.\n" "Usage:\n" "\t%s [options] mountpoint\n" "\n" "-u, --user convert user quota file\n" "-g, --group convert group quota file\n" "-e, --convert-endian convert quota file to correct endianity\n" "-f, --convert-format oldfmt,newfmt convert from old to VFSv0 quota format\n" "-h, --help show this help text and exit\n" "-V, --version output version information and exit\n" "\n" msgstr "" #: convertquota.c:48 warnquota.c:1117 quotacheck.c:314 repquota.c:73 #: common.c:131 #, c-format msgid "Bugs to %s\n" msgstr "Rapports de bugs %s\n" #: convertquota.c:97 msgid "You have to specify source and target format of conversion.\n" msgstr "" #: convertquota.c:112 quotacheck.c:400 quotasync.c:88 repquota.c:163 #: quotaon.c:113 setquota.c:264 msgid "Bad number of arguments.\n" msgstr "Mauvais nombre d'arguments.\n" #: convertquota.c:119 msgid "You have to specify action to perform.\n" msgstr "" #: convertquota.c:166 quotacheck_v2.c:241 quotaio_tree.c:58 #, fuzzy, c-format msgid "Cannot read block %u: %s\n" msgstr "Impossible de lire le bloc %u : %s\n" #: convertquota.c:191 convertquota.c:283 #, fuzzy, c-format msgid "Cannot commit dquot for id %u: %s\n" msgstr "Impossible de mettre jour dquot pour l'id %u : %s\n" #: convertquota.c:239 #, fuzzy msgid "Cannot read header of old quotafile.\n" msgstr "Impossible de lire l'en-tte de l'ancien fichier de quotas.\n" #: convertquota.c:243 msgid "" "Bad file magic or version (probably not quotafile with bad endianity).\n" msgstr "" "Mauvais type ou version de fichier (probablement pas un fichier de quotas " "avec endianess incorrect).\n" #: convertquota.c:254 #, fuzzy msgid "Cannot read information about old quotafile.\n" msgstr "Impossible de lire l'information de l'ancien fichier de quotas.\n" #: convertquota.c:296 #, fuzzy msgid "Cannot get name of new quotafile.\n" msgstr "Impossible d'obtenir le nom du nouveau fichier de quotas.\n" #: convertquota.c:302 quotacheck.c:764 #, c-format msgid "Cannot rename new quotafile %s to name %s: %s\n" msgstr "Impossible de renommer le nouveau fichier de quotas %s en %s : %s\n" #: convertquota.c:316 #, fuzzy, c-format msgid "Cannot open old format file for %ss on %s\n" msgstr "Impossible d'ouvrir l'ancien fichier de format pour %ss sur %s\n" #: convertquota.c:321 convertquota.c:354 #, fuzzy, c-format msgid "Cannot create file for %ss for new format on %s: %s\n" msgstr "" "Impossible de crer le fichier pour %ss pour le nouveau format sur %s : %s\n" #: convertquota.c:344 #, fuzzy, c-format msgid "Cannot open old quota file on %s: %s\n" msgstr "Impossible d'ouvrir l'ancien fichier de quotas sur %s : %s\n" #: convertquota.c:381 msgid "Unknown action should be performed.\n" msgstr "Une action inconnue doit tre excute.\n" #: warnquota.c:59 msgid "" "Hi,\n" "\n" "We noticed that you are in violation with the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" "Bonjour,\n" "\n" "Il semblerait que vous soyez en violation avec le mcanisme de\n" "quotas utilis sur ce systme. Voici les dpassements relevs :\n" "\n" #: warnquota.c:61 #, c-format msgid "" "\n" "We hope that you will cleanup before your grace period expires.\n" "\n" "Basically, this means that the system thinks you are using more disk space\n" "on the above partition(s) than you are allowed. If you do not delete files\n" "and get below your quota before the grace period expires, the system will\n" "prevent you from creating new files.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" "\n" "Nous esprons que vous ferez de la place avant que votre priode de\n" "sursis n'expire.\n" "\n" "En clair, tout cela signifie que le systme pense que vous utilisez\n" "plus d'espace disque qu'il ne vous est autoris sur la (les)\n" "partition(s) ci-dessus. Si vous n'effacez pas de fichiers pour passer\n" "en-dessous de votre quota avant que votre priode de sursis\n" "expire, le systme vous empchera de crer de nouveaux fichiers.\n" "\n" "Pour plus de renseignements, veuillez nous contacter au %s\n" "ou par tlphone au %s.\n" #: warnquota.c:68 #, c-format msgid "" "Hi,\n" "\n" "We noticed that the group %s you are member of violates the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" "Bonjour,\n" "\n" "Il semblerait que le groupe %s dont vous tes membre soit en violation avec\n" "le mcanisme de quotas utilis sur ce systme. Voici les dpassements " "relevs :\n" "\n" #: warnquota.c:70 #, c-format msgid "" "\n" "Please cleanup the group data before the grace period expires.\n" "\n" "Basically, this means that the system thinks group is using more disk space\n" "on the above partition(s) than it is allowed. If you do not delete files\n" "and get below group quota before the grace period expires, the system will\n" "prevent you and other members of the group from creating new files owned by\n" "the group.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" "\n" "Veuillez faire de la place dans les donnes du groupe avant que la\n" "priode de sursis n'expire.\n" "\n" "En clair, tout cela signifie que le systme pense que le groupe utilise\n" "plus d'espace disque qu'il n'est autoris sur la (les)\n" "partition(s) ci-dessus. Si vous n'effacez pas de fichiers pour passer\n" "en-dessous du quota du groupe avant que la priode de sursis\n" "expire, le systme vous empchera, vous ainsi qu'aux autres membres du\n" "groupe, de crer de nouveaux fichiers appartenant ce groupe.\n" "\n" "Pour plus de renseignements, veuillez nous contacter au %s\n" "ou par tlphone au %s.\n" #: warnquota.c:195 #, c-format msgid "Additional error info: %s\n" msgstr "" #: warnquota.c:209 msgid "ldap_initialize() failed" msgstr "" #: warnquota.c:218 msgid "ldap_start_tls_s() failed" msgstr "" #: warnquota.c:224 msgid "ldap_sasl_bind_s() failed" msgstr "" #: warnquota.c:239 #, fuzzy, c-format msgid "Cannot get name for uid/gid %u.\n" msgstr "Impossible d'obtenir un nom pour les uid/gid %u.\n" #: warnquota.c:323 #, fuzzy, c-format msgid "Cannot create pipe: %s\n" msgstr "Impossible de crer un tube : %s\n" #: warnquota.c:329 #, fuzzy, c-format msgid "Cannot fork: %s\n" msgstr "Impossible d'excuter fork() : %s\n" #: warnquota.c:334 #, fuzzy, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "Impossible de dupliquer le descripteur : %s\n" #: warnquota.c:338 #, fuzzy, c-format msgid "Cannot execute '%s': %s\n" msgstr "Impossible d'excuter %s : %s\n" #: warnquota.c:343 #, fuzzy, c-format msgid "Cannot open pipe: %s\n" msgstr "Impossible d'ouvrir pine : %s\n" #: warnquota.c:421 msgid "Could not setup ldap connection.\n" msgstr "" #: warnquota.c:438 #, c-format msgid "" "Could not format LDAP search filter for %s user and %s search attribute due " "to excessive length.\n" msgstr "" #: warnquota.c:449 #, fuzzy, c-format msgid "Error with %s.\n" msgstr "Erreur lors de la modification des quotas.\n" #: warnquota.c:450 msgid "ldap_search_ext_s() failed" msgstr "" #: warnquota.c:456 #, c-format msgid "Multiple entries found for client %s (%d).\n" msgstr "" #: warnquota.c:460 #, c-format msgid "Entry not found for client %s.\n" msgstr "" #: warnquota.c:470 #, fuzzy, c-format msgid "Could not get values for %s.\n" msgstr "Impossible d'obtenir le nom de priphrique pour %s\n" #: warnquota.c:516 #, c-format msgid "Administrator for a group %s not found. Cancelling mail.\n" msgstr "" "Administrateur pour le groupe %s non trouv. Abandon de l'envoi du " "courrier.\n" #: warnquota.c:568 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" "\n" " Limites bloc Limites fichiers\n" #: warnquota.c:569 #, c-format msgid "" "Filesystem used soft hard grace used soft hard grace\n" msgstr "" "Systme fichiers utilis souple stricte sursis utilis souple stricte " "sursis\n" #: warnquota.c:609 #, fuzzy, c-format msgid "Cannot wait for mailer: %s\n" msgstr "Impossible d'attendre le client de messagerie : %s\n" #: warnquota.c:611 msgid "Warning: Mailer exitted abnormally.\n" msgstr "" "Attention : le client de messagerie s'est termin de manire inattendue.\n" #: warnquota.c:668 #, fuzzy, c-format msgid "" "Cannot open %s: %s\n" "Will use device names.\n" msgstr "" "Impossible d'ouvrir %s : %s\n" "Utilisation des noms de priphriques.\n" #: warnquota.c:691 #, fuzzy, c-format msgid "Cannot parse line %d in quotatab (missing ':')\n" msgstr "Impossible d'analyser la ligne %d dans quotatab (il manque : )\n" #: warnquota.c:705 #, fuzzy, c-format msgid "Cannot stat device %s (maybe typo in quotatab)\n" msgstr "" "Impossible d'excuter stat() sur le priphrique %s (erreur de syntaxe dans " "quotatab ?)\n" #: warnquota.c:725 #, c-format msgid "" "Incorrect format string for variable %s.\n" "Unrecognized expression %%%c.\n" msgstr "" #: warnquota.c:739 msgid "Ignoring error in config file.\n" msgstr "" #: warnquota.c:741 msgid "" "Aborting. Use option -I if you want warnquota to ignore errors in the config " "file as it used to in older versions.\n" msgstr "" #: warnquota.c:786 #, fuzzy, c-format msgid "Cannot open %s: %s\n" msgstr "Impossible d'ouvrir %s : %s\n" #: warnquota.c:808 #, c-format msgid "line %d: Line too long! Maximum is %d.\n" msgstr "" #: warnquota.c:881 #, c-format msgid "Cannot parse time at CC_BEFORE variable (line %d).\n" msgstr "" #: warnquota.c:941 #, c-format msgid "" "line %d: LDAP variable in config file but LDAP support is not compiled.\n" msgstr "" #: warnquota.c:949 #, c-format msgid "line %d: Unknown variable %s in config file.\n" msgstr "" #: warnquota.c:957 #, c-format msgid "line %d: Missing '=' in config file.\n" msgstr "" #: warnquota.c:964 #, fuzzy, c-format msgid "line %d: Unterminated last line.\n" msgstr "Dernire ligne non termine, ignore\n" #: warnquota.c:975 #, c-format msgid "Could not format LDAP URI because it's longer than %d bytes.\n" msgstr "" #: warnquota.c:980 #, c-format msgid "" "LDAP library version >= 2.3 detected. Please use LDAP_URI instead of " "hostname and port.\n" "Generated URI %s\n" msgstr "" #: warnquota.c:1002 #, fuzzy, c-format msgid "Cannot open file with group administrators: %s\n" msgstr "" "Impossible d'ouvrir le fichier contenant les administrateurs de groupes : " "%s\n" #: warnquota.c:1017 #, fuzzy, c-format msgid "Parse error at line %d. Cannot find end of group name.\n" msgstr "" "Erreur d'analyse la ligne %d. Impossible de trouver la fin du nom de " "groupe.\n" #: warnquota.c:1026 #, fuzzy, c-format msgid "Parse error at line %d. Cannot find administrators name.\n" msgstr "" "Erreur d'analyse la ligne %d. Impossible de trouver le nom des " "administrateurs.\n" #: warnquota.c:1036 #, c-format msgid "" "Parse error at line %d. Trailing characters after administrators name.\n" msgstr "" "Erreur d'analyse la ligne %d. Caractres parasites aprs le nom des " "administrateurs.\n" #: warnquota.c:1099 msgid "" "Usage:\n" " warnquota [-ugsid] [-F quotaformat] [-c configfile] [-q quotatabfile] [-a " "adminsfile] [filesystem...]\n" "\n" "-u, --user warn users\n" "-g, --group warn groups\n" "-s, --human-readable[=units] display numbers in human friendly units " "(MB,\n" " GB, ...). Units can be also specified\n" " explicitely by an optional argument in " "format\n" " [kgt],[kgt] where the first character " "specifies\n" " space units and the second character " "specifies\n" " inode units\n" "-i, --no-autofs avoid autofs mountpoints\n" "-d, --no-details do not send quota information itself\n" "-F, --format=formatname use quotafiles of specific format\n" "-c, --config=config-file non-default config file\n" "-q, --quota-tab=quotatab-file non-default quotatab\n" "-a, --admins-file=admins-file non-default admins file\n" "-I, --ignore-config-errors\tignore unknown statements in config file\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: warnquota.c:1174 repquota.c:134 quota.c:350 #, c-format msgid "Bad output format units for human readable output: %s\n" msgstr "" #: warnquota.c:1194 #, fuzzy, c-format msgid "Cannot get host name: %s\n" msgstr "Impossible d'obtenir le nom du fichier de quotas pour %s\n" #: quotacheck.c:92 msgid "Not enough memory.\n" msgstr "Pas assez de mmoire.\n" #: quotacheck.c:124 #, fuzzy, c-format msgid "Adding hardlink for inode %llu\n" msgstr "Ajout d'un lien dur pour ino %d\n" #: quotacheck.c:167 #, c-format msgid "Adding dquot structure type %s for %d\n" msgstr "Ajout d'une structure dquot type %s pour %d\n" #: quotacheck.c:253 #, c-format msgid "Cannot open file %s: %s\n" msgstr "Impossible d'ouvrir le fichier %s : %s\n" #: quotacheck.c:258 msgid "Cannot get exact used space... Results might be inaccurate.\n" msgstr "" "Impossible d'obtenir l'espace exact utilis... Les rsultats risque d'tre " "imprcis.\n" #: quotacheck.c:296 #, c-format msgid "" "Utility for checking and repairing quota files.\n" "%s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a\n" "\n" "-u, --user check user files\n" "-g, --group check group files\n" "-c, --create-files create new quota files\n" "-b, --backup create backups of old quota files\n" "-f, --force force check even if quotas are enabled\n" "-i, --interactive interactive mode\n" "-n, --use-first-dquot use the first copy of duplicated structure\n" "-v, --verbose print more information\n" "-d, --debug print even more messages\n" "-m, --no-remount do not remount filesystem read-only\n" "-M, --try-remount try remounting filesystem read-only,\n" " continue even if it fails\n" "-R, --exclude-root exclude root when checking all filesystems\n" "-F, --format=formatname check quota files of specific format\n" "-a, --all check all filesystems\n" "-h, --help display this message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: quotacheck.c:427 #, c-format msgid "error (%d) while opening %s\n" msgstr "erreur (%d) lors de l'ouverture de %s\n" #: quotacheck.c:432 #, fuzzy, c-format msgid "error (%d) while allocating file inode bitmap\n" msgstr "erreur (%d) lors de l'allocation de la bitmap des inodes fichier\n" #: quotacheck.c:437 #, fuzzy, c-format msgid "errstr (%d) while allocating directory inode bitmap\n" msgstr "errstr (%d) lors de l'allocation de la bitmap des inodes rpertoire\n" #: quotacheck.c:442 #, c-format msgid "error (%d) while opening inode scan\n" msgstr "erreur (%d) lors de l'ouverture de l'analyse d'inode\n" #: quotacheck.c:447 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "erreur (%d) lors du dmarrage de l'analyse d'inode\n" #: quotacheck.c:455 #, fuzzy, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "Trouv i_num %ld\n" #: quotacheck.c:461 msgid "High uid detected.\n" msgstr "" #: quotacheck.c:477 #, c-format msgid "Something weird happened while scanning. Error %d\n" msgstr "vnement inattendu lors de l'analyse. Erreur %d\n" #: quotacheck.c:510 #, fuzzy, c-format msgid "Cannot stat directory %s: %s\n" msgstr "" "\n" "Possibilit ouverture rpertoire %s : %s\n" #: quotacheck.c:522 #, fuzzy, c-format msgid "Cannot chdir to %s: %s\n" msgstr "" "\n" "Possibilit ouverture rpertoire %s : %s\n" #: quotacheck.c:527 #, fuzzy, c-format msgid "" "\n" "Cannot open directory %s: %s\n" msgstr "" "\n" "Possibilit ouverture rpertoire %s : %s\n" #: quotacheck.c:539 #, fuzzy, c-format msgid "" "lstat: Cannot stat `%s/%s': %s\n" "Guess you'd better run fsck first !\n" "exiting...\n" msgstr "" "Impossible pour lstat d'excuter stat() sur %s/%s : %s\n" "Il vaudrait mieux lancer fsck d'abord !\n" "Abandon...\n" #: quotacheck.c:551 #, c-format msgid "pushd %s/%s\n" msgstr "pushd %s/%s\n" #: quotacheck.c:567 #, fuzzy, c-format msgid "\tAdding %s size %lld ino %d links %d uid %u gid %u\n" msgstr "\tAjout %s taille %s ino %s liens %d\n" #: quotacheck.c:577 msgid "Scanning stored directories from directory stack\n" msgstr "Parcours des rpertoires stocks depuis la pile des rpertoires\n" #: quotacheck.c:581 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" "popd %s\n" "Entre dans le rpertoire %s\n" #: quotacheck.c:593 #, c-format msgid "Leaving %s\n" msgstr "Quitte %s\n" #: quotacheck.c:633 #, c-format msgid "Going to check %s quota file of %s\n" msgstr "Sur le point de vrifier %s fichier de quotas de %s\n" #: quotacheck.c:639 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" msgstr "" "Les quotas pour %ss sont actif sur le point de montage %s si bien que " "quotacheck risque d'endommager le fichier.\n" #: quotacheck.c:640 quotacheck.c:966 #, fuzzy msgid "Should I continue?" msgstr "Dois-je continuer" #: quotacheck.c:641 quotacheck.c:967 #, c-format msgid "As you wish... Canceling check of this file.\n" msgstr "Suivant vos dsirs... Abandon de la vrification de ce fichier.\n" #: quotacheck.c:646 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" "Please turn quotas off or use -f to force checking.\n" msgstr "" "Les quotas pour %ss sont actif sur le point de montage %s si bien que " "quotacheck risque d'endommager le fichier.\n" "Veuillez dsactiver les quotas ou utiliser -f pour forcer la vrification.\n" #: quotacheck.c:653 #, c-format msgid "Error while syncing quotas on %s: %s\n" msgstr "Erreur lors de la synchronisation des quotas sur %s: %s\n" #: quotacheck.c:658 #, c-format msgid "Cannot get quotafile name for %s\n" msgstr "Impossible d'obtenir le nom du fichier de quotas pour %s\n" #: quotacheck.c:663 quotaio.c:151 quotasys.c:844 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "Impossible d'ouvrir le fichier de quotas %s : %s\n" #: quotacheck.c:702 #, fuzzy msgid "Renaming new files to proper names.\n" msgstr "Renommage du nouveau fichier de quotas\n" #: quotacheck.c:704 #, c-format msgid "Cannot get name of old quotafile on %s.\n" msgstr "Impossible d'obtenir le nom de l'ancien fichier de quotas sur %s.\n" #: quotacheck.c:707 msgid "Old file not found.\n" msgstr "Ancien fichier non trouv.\n" #: quotacheck.c:710 #, c-format msgid "Error while searching for old quota file %s: %s\n" msgstr "Erreur lors de la recherche de l'ancien fichier de quotas %s : %s\n" #: quotacheck.c:719 msgid "Old file found removed during check!\n" msgstr "" #: quotacheck.c:722 #, fuzzy, c-format msgid "Error while opening old quota file %s: %s\n" msgstr "Erreur lors de la recherche de l'ancien fichier de quotas %s : %s\n" #: quotacheck.c:728 #, fuzzy, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "chec de ioctl XFS_IOC_FSBULKSTAT : %s\n" #: quotacheck.c:732 #, c-format msgid "Quota file %s has IMMUTABLE flag set. Clearing.\n" msgstr "" #: quotacheck.c:735 #, fuzzy, c-format msgid "Failed to remove IMMUTABLE flag from quota file %s: %s\n" msgstr "Impossible de lire les informations du fichier de quotas %s : %s\n" #: quotacheck.c:744 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "Renomme l'ancien fichier de quotas en %s~\n" #: quotacheck.c:750 #, c-format msgid "Name of quota file too long. Contact %s.\n" msgstr "Nom du fichier de quotas trop long. Contactez %s.\n" #: quotacheck.c:752 #, c-format msgid "Cannot rename old quotafile %s to %s: %s\n" msgstr "Impossible de renommer l'ancien fichier de quotas %s en %s : %s\n" #: quotacheck.c:758 msgid "Renaming new quotafile\n" msgstr "Renommage du nouveau fichier de quotas\n" #: quotacheck.c:770 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "Impossible de changer les permissions de %s : %s\n" #: quotacheck.c:777 #, fuzzy, c-format msgid "Cannot open new quota file %s: %s\n" msgstr "Impossible d'ouvrir le fichier de quotas %s : %s\n" #: quotacheck.c:782 #, c-format msgid "Warning: Cannot set EXT2 flags on %s: %s\n" msgstr "" #: quotacheck.c:802 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "Dchargement des donnes rcupres pour %ss.\n" #: quotacheck.c:805 #, fuzzy, c-format msgid "Cannot initialize IO on xfs/gfs2 quotafile: %s\n" msgstr "Initialisation ES impossible sur le nouveau fichier de quotas : %s\n" #: quotacheck.c:811 #, c-format msgid "Cannot initialize IO on new quotafile: %s\n" msgstr "Initialisation ES impossible sur le nouveau fichier de quotas : %s\n" #: quotacheck.c:838 #, c-format msgid "Cannot finish IO on new quotafile: %s\n" msgstr "Impossible de terminer ES sur le nouveau fichier de quotas : %s\n" #: quotacheck.c:841 msgid "Data dumped.\n" msgstr "Donnes dcharges.\n" #: quotacheck.c:849 #, c-format msgid "Cannot find checked quota file for %ss on %s!\n" msgstr "Impossible de trouver le fichier de quotas vrifi pour %ss sur %s !\n" #: quotacheck.c:853 #, c-format msgid "" "Cannot turn %s quotas off on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" "Impossible de dsactiver les quotas %s sur %s : %s\n" "Le noyau ne sera pas inform des modifications que quotacheck a effectu.\n" #: quotacheck.c:866 #, c-format msgid "" "Cannot turn %s quotas on on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" "Impossible d'activer les quotas %s sur %s : %s\n" "Le noyau ne sera pas inform des modifications que quotacheck a effectu.\n" #: quotacheck.c:892 #, c-format msgid "Substracting space used by old %s quota file.\n" msgstr "" #: quotacheck.c:894 #, c-format msgid "" "Old %s file name could not been determined. Usage will not be subtracted.\n" msgstr "" #: quotacheck.c:899 #, c-format msgid "Cannot stat old %s quota file %s: %s. Usage will not be subtracted.\n" msgstr "" #: quotacheck.c:911 #, c-format msgid "" "Quota structure for %s owning quota file not present! Something is really " "wrong...\n" msgstr "" #: quotacheck.c:916 #, c-format msgid "Substracted %lu bytes.\n" msgstr "" #: quotacheck.c:930 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "Impossible d'excuter stat() sur le point de montage %s : %s\n" #: quotacheck.c:932 #, fuzzy, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "Le point de montage %s n'est pas un rpertoire ?!\n" #: quotacheck.c:965 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only. Counted values might not " "be right.\n" msgstr "" "Impossible de remonter le systme de fichier mont sur %s en lecture seule. " "Les valeurs comptabilises riquent d'tre fausses.\n" #: quotacheck.c:973 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only so counted values might " "not be right.\n" "Please stop all programs writing to filesystem or use -m flag to force " "checking.\n" msgstr "" "Impossible de remonter le systme de fichier mont sur %s en lecture seule, " "les valeurs comptabilises riquent d'tre fausses.\n" "Veuillez interrompre tous les programmes qui crivent sur ce systme de " "fichiers ou utilisez l'option -m pour forcer la vrification.\n" #: quotacheck.c:981 msgid "Filesystem remounted read-only\n" msgstr "Systme de fichiers remont en lecture seule\n" #: quotacheck.c:984 #, c-format msgid "Scanning %s [%s] " msgstr "Parcours de %s [%s] " #: quotacheck.c:1010 msgid "done\n" msgstr "termin\n" #: quotacheck.c:1019 #, c-format msgid "Checked %d directories and %d files\n" msgstr "Vrifi %d rpertoires et %d fichiers\n" #: quotacheck.c:1023 #, c-format msgid "" "Cannot remount filesystem %s read-write. cannot write new quota files.\n" msgstr "" #: quotacheck.c:1024 msgid "Filesystem remounted RW.\n" msgstr "Systme de fichiers remont en lecture-criture.\n" #: quotacheck.c:1068 #, fuzzy, c-format msgid "Cannot find quota option on filesystem %s with quotas!\n" msgstr "" "Impossible de trouver le type de quota sur le systme de fichiers %s !\n" #: quotacheck.c:1074 #, fuzzy, c-format msgid "Cannot detect quota format for journalled quota on %s\n" msgstr "Impossible d'obtenir le nom de l'ancien fichier de quotas sur %s.\n" #: quotacheck.c:1140 quotasys.c:1610 #, fuzzy, c-format msgid "Cannot get system info: %s\n" msgstr "Impossible de fixer les options de la socket : %s\n" #: quotacheck.c:1171 quotasys.c:934 #, fuzzy msgid "Cannot initialize mountpoint scan.\n" msgstr "Impossible d'initialiser l'analyse du point de montage.\n" #: quotacheck.c:1176 #, c-format msgid "Skipping %s [%s]\n" msgstr "Non traitement de %s [%s]\n" #: quotacheck.c:1193 #, c-format msgid "" "Cannot guess format from filename on %s. Please specify format on " "commandline.\n" msgstr "" "Impossible de deviner le format d'aprs le nom de fichier sur %s. Veuillez " "prciser le format sur la ligne de commande.\n" #: quotacheck.c:1198 #, c-format msgid "Detected quota format %s\n" msgstr "Format de quotas dtect %s\n" #: quotacheck.c:1205 quotaon.c:276 msgid "" "Your kernel probably supports ext4 quota feature but you are using external " "quota files. Please switch your filesystem to use ext4 quota feature as " "external quota files on ext4 are deprecated. You can enable the feature by " "unmounting the file system and running 'tune2fs -O quota <device>'.\n" msgstr "" #: quotacheck.c:1223 msgid "" "Your kernel probably supports journaled quota but you are not using it. " "Consider switching to journaled quota to avoid running quotacheck after an " "unclean shutdown.\n" msgstr "" #: quotacheck.c:1236 #, fuzzy msgid "" "Cannot find filesystem to check or filesystem not mounted with quota " "option.\n" msgstr "" "Impossible de trouver un systme de fichiers vrifier ou systme de " "fichiers mont sans l'option de quotas.\n" #: quotacheck.c:1254 #, c-format msgid "" "Allocated %d bytes memory\n" "Free'd %d bytes\n" "Lost %d bytes\n" msgstr "" "%d octets de mmoire allous\n" "%d octets librs\n" "%d octets perdus\n" #: quotasync.c:29 #, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ugP] mount-point...\n" " or: %1$s [-ugP] -a\n" " or: %1$s -h | -V\n" "\n" msgstr "" #: quotasync.c:36 #, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group quotas\n" "-P, --project synchronize project quotas\n" "-a, --all synchronize quotas for all mounted file systems\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: quotasync.c:45 #, fuzzy, c-format msgid "Report bugs to <%s>.\n" msgstr "Rapports de bugs %s\n" #: quotasync.c:113 #, fuzzy, c-format msgid "%s quota sync failed: %s\n" msgstr "Impossible d'excuter stat() sur le fichier de quotas %s : %s\n" #: quotasync.c:126 #, fuzzy, c-format msgid "%s quota sync failed for %s: %s\n" msgstr "quotactl sur %s : %s\n" #: quota.h:22 msgid "user" msgstr "" #: quota.h:23 #, fuzzy msgid "group" msgstr "Groupe" #: quota.h:24 msgid "project" msgstr "" #: quota.h:25 msgid "undefined" msgstr "" #: quota_nld.c:85 #, fuzzy, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -C --no-console do not try to write messages to console\n" " -b --print-below write to console also information about getting below " "hard/soft limits\n" " -D --no-dbus do not try to write messages to DBUS\n" " -F --foreground run daemon in foreground\n" msgstr "" "Utilisation : %s [options]\n" "Avec pour options :\n" " -h --help affichage de ce texte\n" " -V --version affiche les informations de version\n" " -F --foreground dmarre le service quotas en avant-plan\n" " -s --no-setquota dsactive l'utilisation d'appels distants setquota " "(dfaut)\n" " -S --setquota active l'utilisation d'appels distants setquota\n" #: quota_nld.c:119 rquota_svc.c:158 #, c-format msgid "Unknown option '%c'.\n" msgstr "Option non reconnue %c .\n" #: quota_nld.c:125 msgid "No possible destination for messages. Nothing to do.\n" msgstr "" #: quota_nld.c:151 msgid "Error parsing netlink message.\n" msgstr "" #: quota_nld.c:158 msgid "" "Unknown format of kernel netlink message!\n" "Maybe your quota tools are too old?\n" msgstr "" #: quota_nld.c:182 #, fuzzy msgid "Cannot allocate netlink socket!\n" msgstr "Impossible de crer la socket : %s\n" #: quota_nld.c:188 #, c-format msgid "Cannot register callback for netlink messages: %s\n" msgstr "" #: quota_nld.c:193 #, fuzzy, c-format msgid "Cannot connect to netlink socket: %s\n" msgstr "Impossible de crer la socket : %s\n" #: quota_nld.c:205 #, fuzzy, c-format msgid "Cannot resolve quota netlink name: %s\n" msgstr "Impossible d'obtenir le nom du fichier de quotas pour %s\n" #: quota_nld.c:211 #, fuzzy, c-format msgid "Cannot join quota multicast group: %s\n" msgstr "Impossible d'ouvrir le fichier de quotas %s : %s\n" #: quota_nld.c:224 #, fuzzy, c-format msgid "Cannot connect to system DBUS: %s\n" msgstr "Impossible de crer la socket : %s\n" #: quota_nld.c:292 #, c-format msgid "Failed to find tty of user %llu to report warning to.\n" msgstr "" #: quota_nld.c:297 #, c-format msgid "Failed to open tty %s of user %llu to report warning.\n" msgstr "" #: quota_nld.c:303 msgid "Warning" msgstr "" #: quota_nld.c:306 msgid "Error" msgstr "" #: quota_nld.c:308 msgid "Info" msgstr "" #: quota_nld.c:311 #, fuzzy msgid "file limit reached" msgstr "Limite de fichiers atteinte" #: quota_nld.c:314 msgid "file quota exceeded too long" msgstr "" #: quota_nld.c:317 msgid "file quota exceeded" msgstr "" #: quota_nld.c:320 #, fuzzy msgid "block limit reached" msgstr "Limite de blocs atteinte" #: quota_nld.c:323 msgid "block quota exceeded too long" msgstr "" #: quota_nld.c:326 #, fuzzy msgid "block quota exceeded" msgstr "Quota dpassement blocs activ" #: quota_nld.c:329 msgid "got below file limit" msgstr "" #: quota_nld.c:332 #, fuzzy msgid "got below file quota" msgstr "Quota dpassement fichiers activ" #: quota_nld.c:335 #, fuzzy msgid "got below block limit" msgstr "limite souple bloc" #: quota_nld.c:338 #, fuzzy msgid "got below block quota" msgstr "Quota dpassement blocs activ" #: quota_nld.c:341 msgid "unknown quota warning" msgstr "" #: quota_nld.c:345 #, fuzzy, c-format msgid "Failed to write quota message for user %llu to %s: %s\n" msgstr "Impossible d'crire les quotas pour %u sur %s : %s\n" #: quota_nld.c:358 msgid "Cannot create DBUS message: No enough memory.\n" msgstr "" #: quota_nld.c:376 msgid "Failed to write message to dbus: No enough memory.\n" msgstr "" #: quota_nld.c:392 #, c-format msgid "Failed to read or parse quota netlink message: %s\n" msgstr "" #: quota_nld.c:403 msgid "Undefined program name.\n" msgstr "" #: quota_nld.c:408 #, fuzzy msgid "Not enough memory to build PID file name.\n" msgstr "Pas assez de mmoire.\n" #: quota_nld.c:427 #, fuzzy, c-format msgid "Could not open PID file '%s': %s\n" msgstr "Impossible d'ouvrir le fichier %s : %s\n" #: quota_nld.c:433 #, c-format msgid "Could not write daemon's PID into '%s'.\n" msgstr "" #: quota_nld.c:440 #, c-format msgid "Could not close PID file '%s'.\n" msgstr "" #: quota_nld.c:470 msgid "Could not register PID file removal on SIGTERM.\n" msgstr "" #: quota_nld.c:472 #, c-format msgid "Could not store my PID %jd.\n" msgstr "" #: quota_nld.c:489 rquota_svc.c:537 #, fuzzy, c-format msgid "Failed to daemonize: %s\n" msgstr "chec de la suppression des quotas : %s\n" #: repquota.c:51 #, c-format msgid "" "Utility for reporting quotas.\n" "Usage:\n" "%s [-vugsi] [-c|C] [-t|n] [-F quotaformat] [-O (default | xml | csv)] (-a | " "mntpoint)\n" "\n" "-v, --verbose display also users/groups without any usage\n" "-u, --user display information about users\n" "-g, --group display information about groups\n" "-P, --project display information about projects\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" "-t, --truncate-names truncate names to 9 characters\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-n, --no-names do not translate uid/gid to name\n" "-i, --no-autofs avoid autofs mountpoints\n" "-c, --cache translate big number of ids at once\n" "-C, --no-cache translate ids one by one\n" "-F, --format=formatname report information for specific format\n" "-O, --output=format format output as xml or csv\n" "-a, --all report information for all mount points with\n" " quotas\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: repquota.c:167 #, fuzzy msgid "Repquota cannot report through RPC calls.\n" msgstr "Repquota ne peut pas gnrer de rapport en utilisant des appels RPC.\n" #: repquota.c:171 msgid "Specified both -n and -t but only one of them can be used.\n" msgstr "" "Spcification de -n et -t alors qu'un seul des deux peut tre utilis la " "fois.\n" #: repquota.c:375 msgid "User" msgstr "Utilisateur" #: repquota.c:377 msgid "Group" msgstr "Groupe" #: repquota.c:379 msgid "Project" msgstr "" #: repquota.c:382 #, c-format msgid "*** Report for %s quotas on device %s\n" msgstr "*** Rapport pour les quotas %s sur le priphrique %s\n" #: repquota.c:391 msgid "Space" msgstr "" #: repquota.c:393 #, fuzzy msgid "Block" msgstr "blocs" #: repquota.c:394 #, c-format msgid "Block grace time: %s; Inode grace time: %s\n" msgstr "Priode de sursis bloc : %s ; priode de sursis inode : %s\n" #: repquota.c:395 #, fuzzy, c-format msgid " %s limits File limits\n" msgstr " Limites bloc Limites fichier\n" #: repquota.c:396 #, c-format msgid "%-9s used soft hard grace used soft hard grace\n" msgstr "%-9s utilis souple stricte sursis utilis souple stricte sursis\n" #: quotacheck_v1.c:32 #, fuzzy, c-format msgid "Cannot read entry for id %u from quotafile %s: %s\n" msgstr "" "Impossible de lire l'entre pour l'id %u du fichier de quotas %s : %s\n" #: quotacheck_v1.c:35 #, c-format msgid "Entry for id %u is truncated.\n" msgstr "L'entre pour l'id %u est tronque.\n" #: quotacheck_v1.c:64 msgid "Loading first quota entry with grace times.\n" msgstr "Chargement de la premire entre de quota avec temps de sursis.\n" #: quotacheck_v1.c:68 #, fuzzy, c-format msgid "Cannot read first entry from quotafile %s: %s\n" msgstr "Impossible de lire la premire entre du fichier de quotas %s : %s\n" #: quotacheck_v1.c:72 #, fuzzy, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "ATTENTION - Le fichier de quotas %s a probablement t tronqu. Impossible " "d'enregistrer les rglages des quotas...\n" #: quotacheck_v1.c:78 msgid "First entry loaded.\n" msgstr "Premire entre charge.\n" #: quotacheck_v2.c:55 msgid "Checking quotafile info...\n" msgstr "Vrification des informations du fichier de quotas...\n" #: quotacheck_v2.c:60 #, fuzzy, c-format msgid "Cannot read info from quota file %s: %s\n" msgstr "Impossible de lire les informations du fichier de quotas %s : %s\n" #: quotacheck_v2.c:65 #, fuzzy, c-format msgid "" "WARNING - Quota file %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "ATTENTION - Le fichier de quotas %s a probablement t tronqu. Impossible " "d'enregistrer les rglages des quotas...\n" #: quotacheck_v2.c:77 msgid "WARNING - Quota file info was corrupted.\n" msgstr "" "ATTENTION - Les informations du fichier de quotas ont t corrompues.\n" #: quotacheck_v2.c:78 #, c-format msgid "" "Size of file: %lu\n" "Blocks: %u Free block: %u Block with free entry: %u Flags: %x\n" msgstr "" "Taille du fichier : %lu\n" "Blocs : %u Blocs libres : %u Blocs avec entres libres : %u Drapeaux : %x\n" #: quotacheck_v2.c:85 #, c-format msgid "" "Setting grace times and other flags to default values.\n" "Assuming number of blocks is %u.\n" msgstr "" "Rglage des temps de sursis et autres drapeaux aux valeurs par dfaut.\n" "Considre le nombre de blocs comme tant %u.\n" #: quotacheck_v2.c:102 msgid "File info done.\n" msgstr "Informations fichier termines.\n" #: quotacheck_v2.c:113 msgid "Corrupted blocks: " msgstr "Blocs corrompus : " #: quotacheck_v2.c:117 #, c-format msgid "Block %u: " msgstr "Bloc %u : " #: quotacheck_v2.c:179 msgid "Duplicated entries." msgstr "Entres redondantes." #: quotacheck_v2.c:183 #, fuzzy, c-format msgid "" "Found more structures for ID %u. Using values: BHARD: %lld BSOFT: %lld " "IHARD: %lld ISOFT: %lld\n" msgstr "" "Trouv plus de structures pour l'ID %u. Valeurs utilises : BSTRICT : %Ld " "BSOUPLE : %Ld ISTRICT : %Ld ISOUPLE : %Ld\n" #: quotacheck_v2.c:191 #, fuzzy, c-format msgid "" "Found more structures for ID %u. Values: BHARD: %lld/%lld BSOFT: %lld/%lld " "IHARD: %lld/%lld ISOFT: %lld/%lld\n" msgstr "" "\n" "Trouv plus de structures pour l'ID %u. Valeurs : BSTRICT : %Ld/%Ld " "BSOUPLE : %Ld/%Ld ISTRICT : %Ld/%Ld ISOUPLE : %Ld/%Ld\n" #: quotacheck_v2.c:196 #, fuzzy msgid "Should I use new values?" msgstr "Dois-je utiliser les nouvelles valeurs" #: quotacheck_v2.c:206 #, c-format msgid "" "ID %u has more structures. User intervention needed (use -i for interactive " "mode or -n for automatic answer).\n" msgstr "" "L'ID %u possde plus de structures. Intervention de l'utilisateur ncessaire " "(utilisez -i pour le mode interactif ou -n pour une rponse automatique).\n" #: quotacheck_v2.c:243 #, c-format msgid "Block %u is truncated.\n" msgstr "Le bloc %u est tronqu.\n" #: quotacheck_v2.c:252 #, c-format msgid "Reference to illegal block %u" msgstr "Rfrence un bloc illgal %u" #: quotacheck_v2.c:259 #, c-format msgid "Block %u in tree referenced twice" msgstr "Deux rfrences dans l'arbre pour le bloc %u" #: quotacheck_v2.c:275 #, c-format msgid "Illegal free block reference to block %u" msgstr "Rfrence bloc libre illgale vers le bloc %u" #: quotacheck_v2.c:278 #, c-format msgid "Corrupted number of used entries (%u)" msgstr "Nombre d'entres utilises corrompu (%u)" #: quotacheck_v2.c:330 #, fuzzy, c-format msgid "" "Quota file %s has corrupted headers. You have to specify quota format on " "command line.\n" msgstr "" "Impossible de deviner le format d'aprs le nom de fichier sur %s. Veuillez " "prciser le format sur la ligne de commande.\n" #: quotacheck_v2.c:346 msgid "Checking quotafile headers...\n" msgstr "Vrification des en-ttes du fichier de quotas...\n" #: quotacheck_v2.c:350 #, fuzzy, c-format msgid "Cannot read header from quotafile %s: %s\n" msgstr "Impossible de lire l'en-tte du fichier de quotas %s : %s\n" #: quotacheck_v2.c:352 #, fuzzy, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "ATTENTION - Le fichier de quotas %s a probablement t tronqu. Impossible " "d'enregistrer les rglages des quotas...\n" #: quotacheck_v2.c:358 #, c-format msgid "WARNING - Quota file %s has corrupted headers\n" msgstr "ATTENTION - Les en-ttes du fichier de quotas %s sont corrompus\n" #: quotacheck_v2.c:361 msgid "Continue checking assuming format from command line?" msgstr "" #: quotacheck_v2.c:365 #, c-format msgid "" "Quota file format version %d does not match the one specified on command " "line (%d). Quota file header may be corrupted.\n" msgstr "" #: quotacheck_v2.c:370 msgid "Continue checking assuming version from command line?" msgstr "" #: quotacheck_v2.c:376 msgid "Headers checked.\n" msgstr "En-ttes vrifis.\n" #: quotacheck_v2.c:392 #, c-format msgid "Do not know how to buffer format %d\n" msgstr "" #: quotacheck_v2.c:402 #, c-format msgid "Headers of file %s checked. Going to load data...\n" msgstr "En-ttes du fichier %s vrifis. Chargement des donnes imminent...\n" #: quotacheck_v2.c:410 #, fuzzy msgid "Cannot gather quota data. Tree root node corrupted.\n" msgstr "" "Impossible de rcuprer les donnes des quotas. Noeud racine de l'arbre " "corrompu.\n" #: quotacheck_v2.c:418 msgid "WARNING - Some data might be changed due to corruption.\n" msgstr "" "ATTENTION - Certaines donnes risquent d'tre modifies suite la " "corruption.\n" #: quotacheck_v2.c:421 msgid "Not found any corrupted blocks. Congratulations.\n" msgstr "Aucun bloc corrompu n'a t trouv. Flicitations.\n" #: quotaio.c:62 msgid "Only RPC quota format is allowed on NFS filesystem.\n" msgstr "" "Sur un systme de fichiers NFS, seul le format de quotas RPC est autoris.\n" #: quotaio.c:73 msgid "RPC quota format not compiled.\n" msgstr "Le format de quotas RPC n'a pas t compil.\n" #: quotaio.c:77 #, fuzzy msgid "RPC quota format specified for non-NFS filesystem.\n" msgstr "" "Sur un systme de fichiers NFS, seul le format de quotas RPC est autoris.\n" #: quotaio.c:85 msgid "Only XFS quota format is allowed on XFS filesystem.\n" msgstr "" "Sur un systme de fichiers XFS, seul le format de quotas XFS est autoris.\n" #: quotaio.c:96 msgid "XFS quota allowed only on XFS filesystem.\n" msgstr "Quotas XFS autoriss uniquement sur un systme de fichiers XFS.\n" #: quotaio.c:110 #, fuzzy msgid "Quota not supported by the filesystem.\n" msgstr "Ce format de quotas n'est pas support par le noyau.\n" #: quotaio.c:130 #, fuzzy msgid "Cannot find any quota file to work on.\n" msgstr "Impossible de trouver le fichier de quotas vrifi pour %ss sur %s !\n" #: quotaio.c:135 msgid "Quota file not found or has wrong format.\n" msgstr "Le fichier de quotas est introuvable ou n'a pas le bon format.\n" #: quotaio.c:145 #, fuzzy, c-format msgid "Cannot sync quotas on device %s: %s\n" msgstr "Impossible de synchroniser les quotas sur le priphrique %s : %s\n" #: quotaio.c:176 #, fuzzy, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "Impossible d'initialiser les quotas sur %s : %s\n" #: quotaio.c:203 #, c-format msgid "Creation of %s quota format is not supported.\n" msgstr "La cration de quotas au format %s n'est pas supporte.\n" #: quotaio.c:213 #, c-format msgid "" "Quota on %s is stored in system files and must be manipulated by fs tools.\n" msgstr "" #: quotaio.c:223 #, fuzzy, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "Impossible de crer le nouveau fichier de quotas %s : %s\n" #: quotaio.c:297 #, fuzzy, c-format msgid "" "Trying to set quota limits out of range supported by quota format on %s.\n" msgstr "" "Tentative d'criture des quotas dans un fichier en lecture seule sur %s\n" #: quotaio.c:303 #, fuzzy, c-format msgid "" "Trying to set quota usage out of range supported by quota format on %s.\n" msgstr "" "Tentative d'criture des quotas dans un fichier en lecture seule sur %s\n" #: quotaio_generic.c:54 #, c-format msgid "Cannot get info for %s quota file from kernel on %s: %s\n" msgstr "" "Impossible d'obtenir du noyau les informations pour le fichier de quotas %s " "sur %s : %s\n" #: quotaio_generic.c:72 #, c-format msgid "Cannot set info for %s quota file from kernel on %s: %s\n" msgstr "" "Impossible de fixer dans le noyau les informations pour le fichier de quotas " "%s sur %s : %s\n" #: quotaio_generic.c:84 #, c-format msgid "Cannot get quota for %s %d from kernel on %s: %s\n" msgstr "Impossible d'obtenir du noyau les quotas pour %s %d sur %s : %s\n" #: quotaio_generic.c:99 #, c-format msgid "Cannot set quota for %s %d from kernel on %s: %s\n" msgstr "Impossible de fixer les quotas dans le noyau pour %s %d sur %s : %s\n" #: quotaio_meta.c:23 msgid "Metadata init_io called when kernel support is not enabled.\n" msgstr "" #: quotaio_meta.c:27 msgid "" "Metadata init_io called when kernel does not support generic quota " "interface!\n" msgstr "" #: quotaio_rpc.c:77 quotaio_v1.c:278 quotaio_v2.c:464 #, c-format msgid "Trying to write quota to readonly quotafile on %s\n" msgstr "" "Tentative d'criture des quotas dans un fichier en lecture seule sur %s\n" #: quotaio_tree.c:71 #, fuzzy, c-format msgid "Cannot write block (%u): %s\n" msgstr "Impossible d'crire le bloc (%u) : %s\n" #: quotaio_tree.c:94 #, fuzzy msgid "Cannot allocate new quota block (out of disk space).\n" msgstr "" "Impossible d'allouer un nouveau bloc de quota (plus d'espace disque " "disponible).\n" #: quotaio_tree.c:202 msgid "find_free_dqentry(): Data block full but it shouldn't.\n" msgstr "" "find_free_dqentry() : bloc de donnes plein alors qu'il ne devrait pas " "l'tre.\n" #: quotaio_tree.c:237 #, c-format msgid "Inserting already present quota entry (block %u).\n" msgstr "Insertion d'une entre de quota dj prsente (bloc %u).\n" #: quotaio_tree.c:260 #, fuzzy, c-format msgid "Cannot write quota (id %u): %s\n" msgstr "Impossible d'crire les quotas (id %u) : %s\n" #: quotaio_tree.c:279 #, c-format msgid "Quota write failed (id %u): %s\n" msgstr "chec de l'criture des quotas (id %u) : %s\n" #: quotaio_tree.c:291 #, c-format msgid "Quota structure has offset to other block (%u) than it should (%u).\n" msgstr "" "La structure du quota comporte un dcalage vers un autre bloc (%u) que celui " "qu'elle devrait (%u).\n" #: quotaio_tree.c:367 #, c-format msgid "Quota for id %u referenced but not present.\n" msgstr "Quota pour l'id %u rfrenc mais absent.\n" #: quotaio_tree.c:426 #, fuzzy, c-format msgid "Cannot read quota structure for id %u: %s\n" msgstr "Impossible de lire la structure de quotas pour l'id %u : %s\n" #: quotaio_tree.c:468 #, c-format msgid "" "Illegal reference (%u >= %u) in %s quota file on %s. Quota file is probably " "corrupted.\n" "Please run quotacheck(8) and try again.\n" msgstr "" #: quotaio_v1.c:184 #, c-format msgid "Trying to write info to readonly quotafile on %s.\n" msgstr "" "Tentative d'criture des informations dans un fichier en lecture seule sur " "%s.\n" #: quotaio_v2.c:255 msgid "" "Your quota file is stored in wrong endianity. Please use convertquota(8) to " "convert it.\n" msgstr "" "Votre fichier de quotas est stock avec un ordre des octets incorrect. " "Veuillez utiliser convertquota(8) pour le convertir.\n" #: quotaio_v2.c:388 #, c-format msgid "Trying to write info to readonly quotafile on %s\n" msgstr "" "Tentative d'criture des informations dans un fichier en lecture seule sur " "%s\n" #: quotaio_v2.c:518 #, c-format msgid "" "Statistics:\n" "Total blocks: %u\n" "Data blocks: %u\n" "Entries: %u\n" "Used average: %f\n" msgstr "" "Statistiques :\n" "Total des blocs : %u\n" "Blocs de donnes : %u\n" "Entres : %u\n" "Moyenne d'utilisation : %f\n" #: quotaio_xfs.c:53 msgid "Truncating kernel returned time stamp." msgstr "" #: quotaio_xfs.c:311 #, c-format msgid "*** Status for %s quotas on device %s\n" msgstr "*** Statut des quotas %s sur le priphrique %s\n" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "ON" msgstr "ACTIV" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "OFF" msgstr "DESACTIV" #: quotaio_xfs.c:315 quotaio_xfs.c:319 quotaio_xfs.c:323 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "Compte : %s ; En vigueur : %s\n" #: quotaio_xfs.c:335 quotaio_xfs.c:339 quotaio_xfs.c:343 #, c-format msgid "Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n" msgstr "Compte [sur disque] : %s ; En vigueur [sur disque] : %s\n" #: quotaio_xfs.c:352 quotaio_xfs.c:361 quotaio_xfs.c:374 #, c-format msgid "Inode: none\n" msgstr "Inode : aucun\n" #: quotaio_xfs.c:354 quotaio_xfs.c:363 quotaio_xfs.c:376 #, fuzzy, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "Inode : #%Lu (%Lu blocs, %u tendus)\n" #: quotaon.c:37 #, c-format msgid "" "Usage:\n" "\t%s [-guPvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guPvp] [-F quotaformat] [-x state] filesys ...\n" "\n" "-a, --all %s\n" "-f, --off turn quotas off\n" "-u, --user operate on user quotas\n" "-g, --group operate on group quotas\n" "-P, --project operate on project quotas\n" "-p, --print-state print whether quotas are on or off\n" "-x, --xfs-command=cmd perform XFS quota command\n" "-F, --format=formatname operate on specific quota format\n" "-v, --verbose print more messages\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" msgstr "" #: quotaon.c:51 msgid "turn quotas off for all filesystems" msgstr "" #: quotaon.c:52 #, fuzzy msgid "turn quotas on for all filesystems" msgstr "Quotas XFS autoriss uniquement sur un systme de fichiers XFS.\n" #: quotaon.c:117 #, fuzzy msgid "Cannot turn on/off quotas via RPC.\n" msgstr "Impossible d'activer/dsactiver les quotas via RPC.\n" #: quotaon.c:164 #, c-format msgid "set root_squash on %s: %s\n" msgstr "Positionnez root_squash sur %s : %s\n" #: quotaon.c:168 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "%s : %s root_squash dsactiv\n" #: quotaon.c:170 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "%s : %s root_squash activ\n" #: quotaon.c:188 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "quotactl sur %s [%s] : %s\n" #: quotaon.c:191 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "%s [%s] : quotas %s dsactivs\n" #: quotaon.c:204 #, fuzzy, c-format msgid "cannot find %s on %s [%s]\n" msgstr "impossible de trouver %s sur %s [%s]\n" #: quotaon.c:206 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "utilisation de %s sur %s [%s] : %s\n" #: quotaon.c:208 msgid "Maybe create new quota files with quotacheck(8)?\n" msgstr "" "Essayez peut-tre de crer un nouveau fichier de quotas avec " "quotacheck(8) ?\n" #: quotaon.c:210 msgid "Quota format not supported in kernel.\n" msgstr "Ce format de quotas n'est pas support par le noyau.\n" #: quotaon.c:213 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "%s [%s] : quotas %s activs\n" #: quotaon.c:254 #, fuzzy msgid "Cannot change state of GFS2 quota.\n" msgstr "Impossible d'obtenir le nom du nouveau fichier de quotas.\n" #: quotaon.c:259 #, fuzzy msgid "Cannot change state of XFS quota. It's not compiled in kernel.\n" msgstr "" "Impossible de changer l'tat des quotas XFS. Non compil dans le noyau.\n" #: quotaon.c:295 #, c-format msgid "Cannot find quota file on %s [%s] to turn quotas on/off.\n" msgstr "" "Impossible de trouver le fichier de quotas sur %s [%s] pour activer/" "dsactiver les quotas.\n" #: quotaon.c:300 #, fuzzy, c-format msgid "Quota file on %s [%s] does not exist or has wrong format.\n" msgstr "Le fichier de quotas est introuvable ou n'a pas le bon format.\n" #: quotaon.c:330 quotaon.c:346 msgid "off" msgstr "" #: quotaon.c:332 msgid "on (accounting)" msgstr "" #: quotaon.c:334 msgid "on (enforced)" msgstr "" #: quotaon.c:346 #, fuzzy msgid "on" msgstr "aucun" #: quotaon.c:348 #, fuzzy, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "quotactl sur %s [%s] : %s\n" #: quotaon.c:365 #, c-format msgid "Name must be quotaon or quotaoff not %s\n" msgstr "Le nom doit tre quotaon ou quotaoff et non %s\n" #: quotaon.c:371 #, c-format msgid "Required format %s not supported by kernel.\n" msgstr "Le format requis %s n'est pas support par le noyau.\n" #: quotaon.c:373 #, fuzzy msgid "Warning: No quota format detected in the kernel.\n" msgstr "Ce format de quotas n'est pas support par le noyau.\n" #: quotaon.c:380 #, fuzzy, c-format msgid "%s: Quota cannot be turned on on NFS filesystem\n" msgstr "Quotas XFS autoriss uniquement sur un systme de fichiers XFS.\n" #: quotaon_xfs.c:36 #, c-format msgid "quotactl() on %s: %s\n" msgstr "quotactl() sur %s : %s\n" #: quotaon_xfs.c:68 quotaon_xfs.c:88 #, c-format msgid "Enabling %s quota on root filesystem (reboot to take effect)\n" msgstr "" "Activation des quotas %s sur le systme de fichiers racine (redmarrez pour " "prise en compte)\n" #: quotaon_xfs.c:72 #, fuzzy, c-format msgid "Enable XFS %s quota accounting during mount\n" msgstr "Activer les quotas XFS %s au moment du montage\n" #: quotaon_xfs.c:82 #, c-format msgid "Cannot delete %s quota on %s - switch quota accounting off first\n" msgstr "" "Impossible d'effacer les quotas %s sur %s - supprimez d'abord la prise en " "compte des quotas\n" #: quotaon_xfs.c:95 #, fuzzy, c-format msgid "Enabling %s quota enforcement on %s\n" msgstr "Suppression de l'application des quotas %s sur %s\n" #: quotaon_xfs.c:98 #, fuzzy, c-format msgid "Already accounting %s quota on %s\n" msgstr "Application des quotas %s dj sur %s\n" #: quotaon_xfs.c:105 #, c-format msgid "Disabling %s quota accounting on %s\n" msgstr "Suppression de la prise en compte des quotas %s sur %s\n" #: quotaon_xfs.c:109 #, fuzzy, c-format msgid "Quota enforcement already disabled for %s on %s\n" msgstr "Impossible d'ouvrir l'ancien fichier de format pour %ss sur %s\n" #: quotaon_xfs.c:118 #, fuzzy, c-format msgid "" "Cannot delete %s quota on %s - switch quota enforcement and accounting off " "first\n" msgstr "" "Impossible d'effacer les quotas %s sur %s - supprimez d'abord l'application " "des quotas\n" #: quotaon_xfs.c:123 #, c-format msgid "Enforcing %s quota already on %s\n" msgstr "Application des quotas %s dj sur %s\n" #: quotaon_xfs.c:130 #, fuzzy, c-format msgid "Cannot switch off %s quota accounting on %s when enforcement is on\n" msgstr "" "Impossible d'effacer les quotas %s sur %s - supprimez d'abord l'application " "des quotas\n" #: quotaon_xfs.c:138 msgid "and accounting " msgstr "" #: quotaon_xfs.c:139 #, fuzzy, c-format msgid "Disabling %s quota enforcement %son %s\n" msgstr "Suppression de l'application des quotas %s sur %s\n" #: quotaon_xfs.c:145 #, c-format msgid "Unexpected XFS quota state sought on %s\n" msgstr "tat des quotas XFS inattendu trouv sur %s\n" #: quotaon_xfs.c:160 #, c-format msgid "quotactl on %s: %s\n" msgstr "quotactl sur %s : %s\n" #: quotaon_xfs.c:164 #, c-format msgid "%s: %s quotas turned off\n" msgstr "%s : quotas %s dsactivs\n" #: quotaon_xfs.c:166 #, c-format msgid "%s: %s quotas turned on\n" msgstr "%s : quotas %s activs\n" #: quotaon_xfs.c:180 #, c-format msgid "Failed to delete quota: %s\n" msgstr "chec de la suppression des quotas : %s\n" #: quotaon_xfs.c:185 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "%s : blocs des quotas %s effacs\n" #: quotaon_xfs.c:248 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "Argument incorrect %s \n" #: quotaops.c:82 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "%s (uid %d) : permission refuse\n" #: quotaops.c:94 #, c-format msgid "%s (gid %d): gid set allocation (%d): %s\n" msgstr "" #: quotaops.c:105 #, fuzzy, c-format msgid "%s (gid %d): error while trying getgroups(): %s\n" msgstr "Erreur lors de l'excution de getgroups() : %s\n" #: quotaops.c:116 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "%s (gid %d) : permission refuse\n" #: quotaops.c:134 #, fuzzy msgid "Cannot connect to RPC quota service" msgstr "Impossible de crer la socket : %s\n" #: quotaops.c:136 msgid "Quota not enabled" msgstr "" #: quotaops.c:141 #, fuzzy, c-format msgid "error while getting quota from %s for %s (id %u): %s\n" msgstr "Erreur lors de la recherche des quotas de %s pour %u : %s\n" #: quotaops.c:169 #, fuzzy, c-format msgid "Cannot write quota for %u on %s: %s\n" msgstr "Impossible d'crire les quotas pour %u sur %s : %s\n" #: quotaops.c:204 quotaops.c:206 #, fuzzy, c-format msgid "%s failed: %s\n" msgstr "Impossible d'excuter stat() sur le fichier de quotas %s : %s\n" #: quotaops.c:220 msgid "Too many parameters to editor.\n" msgstr "" #: quotaops.c:228 #, fuzzy, c-format msgid "Cannot exec %s\n" msgstr "Impossible d'excuter %s\n" #: quotaops.c:245 #, fuzzy, c-format msgid "Cannot truncate a file: %s\n" msgstr "Impossible d'excuter stat() sur le fichier de quotas %s : %s\n" #: quotaops.c:247 #, fuzzy, c-format msgid "Cannot reset a file offset: %s\n" msgstr "Impossible de lire le fichier de statistiques %s : %s\n" #: quotaops.c:249 #, fuzzy, c-format msgid "Cannot duplicate a file descriptor: %s\n" msgstr "Impossible de dupliquer le descripteur : %s\n" #: quotaops.c:251 #, fuzzy, c-format msgid "Cannot open a stream to write to: %s\n" msgstr "Impossible de r-ouvrir le fichier temporaire : %s\n" #: quotaops.c:252 #, fuzzy, c-format msgid "Cannot open a stream to read from: %s\n" msgstr "Impossible de r-ouvrir le fichier temporaire : %s\n" #: quotaops.c:268 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "Quotas disque pour %s %s (%cid %d) :\n" #: quotaops.c:272 #, c-format msgid "" " Filesystem blocks soft hard inodes " "soft hard\n" msgstr "" " Systme de fichiers blocs souple stricte inodes " "souple stricte\n" #: quotaops.c:305 #, c-format msgid "WARNING - %s: cannot change current block allocation\n" msgstr "" "ATTENTION - %s : impossible de modifier l'allocation actuelle des blocs\n" #: quotaops.c:308 #, c-format msgid "WARNING - %s: cannot change current inode allocation\n" msgstr "" "ATTENTION - %s : impossible de modifier l'allocation actuelle des inodes\n" #: quotaops.c:334 msgid "Bad format: two title lines assumed\n" msgstr "" #: quotaops.c:345 #, c-format msgid "" "Bad format:\n" "%s\n" msgstr "" "Format incorrect :\n" "%s\n" #: quotaops.c:351 #, fuzzy, c-format msgid "Bad block usage: %s: %s\n" msgstr "Mauvais %s : %s\n" #: quotaops.c:358 #, fuzzy, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "limite souple bloc" #: quotaops.c:365 #, fuzzy, c-format msgid "Bad block hard limit: %s: %s\n" msgstr "limite stricte bloc" #: quotaops.c:372 #, fuzzy, c-format msgid "Bad inode usage: %s: %s\n" msgstr "Mauvais %s : %s\n" #: quotaops.c:379 #, fuzzy, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "limite souple inode" #: quotaops.c:386 #, fuzzy, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "limite stricte inode" #: quotaops.c:439 #, c-format msgid "Times to enforce softlimit for %s %s (%cid %d):\n" msgstr "Temps avant l'application de la limite souple pour %s %s (%cid %d) :\n" #: quotaops.c:441 quotaops.c:544 #, c-format msgid "Time units may be: days, hours, minutes, or seconds\n" msgstr "" "Units de temps peuvent tre : days (jours), hours (heures), minutes, ou " "seconds\n" #: quotaops.c:443 #, c-format msgid "" " Filesystem block grace inode grace\n" msgstr "" " Systme de fichiers sursis bloc sursis " "inode\n" #: quotaops.c:448 quotaops.c:454 quotaops.c:499 quotaops.c:512 setquota.c:288 #: setquota.c:294 msgid "unset" msgstr "vide" #: quotaops.c:450 quotaops.c:456 msgid "0seconds" msgstr "0seconds" #: quotaops.c:452 quotaops.c:458 quotasys.c:504 #, c-format msgid "%useconds" msgstr "%useconds" #: quotaops.c:485 quotaops.c:584 msgid "Bad format: three title lines assumed\n" msgstr "" #: quotaops.c:495 quotaops.c:592 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" "format incorrect :\n" "%s\n" #: quotaops.c:506 quotaops.c:598 #, fuzzy msgid "Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n" msgstr "" "Mauvaise unit de temps. Les units sont second , minute , hour et " " day .\n" #: quotaops.c:542 #, c-format msgid "Grace period before enforcing soft limits for %ss:\n" msgstr "Sursis avant l'application des limites souples pour %ss :\n" #: quotaops.c:545 #, c-format msgid " Filesystem Block grace period Inode grace period\n" msgstr "" " Systme de fichiers priode de sursis bloc priode de sursis inode\n" #: quotastats.c:48 #, fuzzy, c-format msgid "Cannot read stat file %s: %s\n" msgstr "Impossible de lire le fichier de statistiques %s : %s\n" #: quotastats.c:83 #, c-format msgid "Error while getting quota statistics from kernel: %s\n" msgstr "" "Erreur lors de la rcupration des statistiques des quotas du noyau : %s\n" #: quotastats.c:87 #, c-format msgid "Error while getting old quota statistics from kernel: %s\n" msgstr "" "Erreur lors de la rcupration des anciennes statistiques des quotas du " "noyau : %s\n" #: quotastats.c:101 #, c-format msgid "Kernel quota version: old\n" msgstr "Version quotas du noyau : ancienne\n" #: quotastats.c:103 #, c-format msgid "Kernel quota version: %u.%u.%u\n" msgstr "Version quotas du noyau : %u.%u.%u\n" #: quotastats.c:104 #, c-format msgid "Number of dquot lookups: %ld\n" msgstr "Nombre de requtes dquot : %ld\n" #: quotastats.c:105 #, c-format msgid "Number of dquot drops: %ld\n" msgstr "Nombre de rejets dquot : %ld\n" #: quotastats.c:106 #, c-format msgid "Number of dquot reads: %ld\n" msgstr "Nombre de lectures dquot : %ld\n" #: quotastats.c:107 #, c-format msgid "Number of dquot writes: %ld\n" msgstr "Nombre d'critures dquot : %ld\n" #: quotastats.c:108 #, c-format msgid "Number of quotafile syncs: %ld\n" msgstr "Nombre de synchro fichier de quotas : %ld\n" #: quotastats.c:109 #, c-format msgid "Number of dquot cache hits: %ld\n" msgstr "Nombre de succs cache dquot : %ld\n" #: quotastats.c:110 #, c-format msgid "Number of allocated dquots: %ld\n" msgstr "Nombre de dquots allous : %ld\n" #: quotastats.c:111 #, c-format msgid "Number of free dquots: %ld\n" msgstr "Nombre de dquots libre : %ld\n" #: quotastats.c:112 #, c-format msgid "Number of in use dquot entries (user/group): %ld\n" msgstr "Nombre d'entres dquot utilises (utilisateur/groupe) : %ld\n" #: setquota.c:59 #, c-format msgid "" "Usage:\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <user|group|project>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <-p protouser|protogroup|" "protoproject> <user|group|project> -a|<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] -b [-c] -a|<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] -t <blockgrace> <inodegrace> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] <user|group|project> -T <blockgrace> " "<inodegrace> -a|<filesystem>...\n" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\n" "-P, --project set limits for project\n" "-a, --all set limits for all filesystems\n" " --always-resolve always try to resolve name, even if is\n" " composed only of digits\n" "-F, --format=formatname operate on specific quota format\n" "-p, --prototype=protoname copy limits from user/group/project\n" "-b, --batch read limits from standard input\n" "-c, --continue-batch continue in input processing in case of an error\n" msgstr "" #: setquota.c:77 msgid "" "-r, --remote set remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" #: setquota.c:80 msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group/project\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: setquota.c:84 edquota.c:73 quota.c:94 #, c-format msgid "Bugs to: %s\n" msgstr "Rapports de bugs : %s\n" #: setquota.c:95 #, fuzzy, c-format msgid "%s: %s\n" msgstr "Mauvais %s : %s\n" #: setquota.c:108 setquota.c:121 #, fuzzy, c-format msgid "%s: %s: %s\n" msgstr "%s (%s) %s :\n" #: setquota.c:229 #, fuzzy msgid "Group/user/project quotas cannot be used together.\n" msgstr "" "Les quotas groupes et utilisateurs ne peuvent pas tre utiliss " "simultanment.\n" #: setquota.c:233 msgid "Prototype user has no sense when editing grace times.\n" msgstr "" "Un prototype d'utilisateur n'a pas lieu d'tre pour la modification des " "temps de sursis.\n" #: setquota.c:237 #, fuzzy msgid "Cannot set both individual and global grace time.\n" msgstr "Impossible d'crire les temps de sursis individuels dans le fichier.\n" #: setquota.c:241 #, fuzzy msgid "Batch mode cannot be used for setting grace times.\n" msgstr "" "Un prototype d'utilisateur n'a pas lieu d'tre pour la modification des " "temps de sursis.\n" #: setquota.c:245 #, fuzzy msgid "Batch mode and prototype user cannot be used together.\n" msgstr "" "Les quotas groupes et utilisateurs ne peuvent pas tre utiliss " "simultanment.\n" #: setquota.c:249 #, fuzzy msgid "Cannot set grace times over RPC protocol.\n" msgstr "Impossible d'crire les temps de sursis dans le fichier.\n" #: setquota.c:272 #, fuzzy msgid "Bad block softlimit" msgstr "limite souple bloc" #: setquota.c:273 #, fuzzy msgid "Bad block hardlimit" msgstr "limite stricte bloc" #: setquota.c:274 #, fuzzy msgid "Bad inode softlimit" msgstr "limite souple inode" #: setquota.c:275 #, fuzzy msgid "Bad inode hardlimit" msgstr "limite stricte inode" #: setquota.c:281 setquota.c:293 #, fuzzy msgid "Bad block grace time" msgstr "temps de sursis bloc" #: setquota.c:282 setquota.c:299 #, fuzzy msgid "Bad inode grace time" msgstr "temps de sursis inode" #: setquota.c:305 msgid "Mountpoint not specified.\n" msgstr "Point de montage non spcifi.\n" #: setquota.c:319 setquota.c:450 setquota.c:493 #, fuzzy msgid "Error getting quota information to update.\n" msgstr "Impossible d'obtenir le nom du fichier de quotas pour %s\n" #: setquota.c:325 msgid "Error getting prototype quota information.\n" msgstr "" #: setquota.c:372 #, fuzzy, c-format msgid "Line %d too long.\n" msgstr "Ligne %d trop longue. Tronque.\n" #: setquota.c:384 #, fuzzy, c-format msgid "Cannot parse input line %d.\n" msgstr "Impossible d'ouvrir le fichier %s : %s\n" #: setquota.c:386 setquota.c:394 setquota.c:403 setquota.c:412 setquota.c:421 #: setquota.c:430 msgid "Exitting.\n" msgstr "" #: setquota.c:387 setquota.c:395 setquota.c:404 setquota.c:413 setquota.c:422 #: setquota.c:431 #, fuzzy msgid "Skipping line.\n" msgstr "Non traitement de %s [%s]\n" #: setquota.c:392 #, c-format msgid "Unable to resolve name '%s' on line %d.\n" msgstr "" #: setquota.c:400 #, c-format msgid "Unable to parse block soft limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:409 #, c-format msgid "Unable to parse block hard limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:418 #, c-format msgid "Unable to parse inode soft limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:427 #, c-format msgid "Unable to parse inode hard limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:474 #, fuzzy, c-format msgid "Setting grace period on %s is not supported.\n" msgstr "La cration de quotas au format %s n'est pas supporte.\n" #: setquota.c:500 #, c-format msgid "Not setting block grace time on %s because softlimit is not exceeded.\n" msgstr "" #: setquota.c:504 #, c-format msgid "Not setting inode grace time on %s because softlimit is not exceeded.\n" msgstr "" #: setquota.c:515 #, fuzzy, c-format msgid "" "cannot write times for %s. Maybe kernel does not support such operation?\n" msgstr "" "Impossible d'crire les temps pour %s. Le noyau supporte-t'il une telle " "opration ?\n" #: quotasys.c:190 #, fuzzy, c-format msgid "user %s does not exist.\n" msgstr "L'utilisateur %s n'existe pas.\n" #: quotasys.c:219 #, fuzzy, c-format msgid "group %s does not exist.\n" msgstr "Le groupe %s n'existe pas.\n" #: quotasys.c:249 #, fuzzy, c-format msgid "project %s does not exist.\n" msgstr "Le groupe %s n'existe pas.\n" #: quotasys.c:371 #, fuzzy, c-format msgid "" "Unknown quota format: %s\n" "Supported formats are:\n" " vfsold - original quota format\n" " vfsv0 - standard quota format\n" " vfsv1 - quota format with 64-bit limits\n" " rpc - use RPC calls\n" " xfs - XFS quota format\n" msgstr "" "Format de quotas inconnu : %s\n" "Les formats supports sont :\n" " vfsold - format de quotas original\n" " vfsv0 - nouveau format de quotas\n" " rpc - utilise les appels RPC\n" " xfs - format de quotas XFS\n" #: quotasys.c:398 #, c-format msgid "" "Unknown output format: %s\n" "Supported formats are:\n" " default - default\n" " csv - comma-separated values\n" " xml - simple XML\n" msgstr "" #: quotasys.c:460 quota.c:282 msgid "none" msgstr "aucun" #: quotasys.c:492 #, c-format msgid "%ddays" msgstr "%ddays" #: quotasys.c:494 #, c-format msgid "%02d:%02d" msgstr "%02d:%02d" #: quotasys.c:506 #, c-format msgid "%uminutes" msgstr "%uminutes" #: quotasys.c:508 #, c-format msgid "%uhours" msgstr "%uhours" #: quotasys.c:510 #, c-format msgid "%udays" msgstr "%udays" #: quotasys.c:519 #, fuzzy msgid "second" msgstr "0seconds" #: quotasys.c:519 #, fuzzy msgid "seconds" msgstr "0seconds" #: quotasys.c:521 #, fuzzy msgid "minute" msgstr "%uminutes" #: quotasys.c:521 #, fuzzy msgid "minutes" msgstr "%uminutes" #: quotasys.c:523 #, fuzzy msgid "hour" msgstr "%uhours" #: quotasys.c:523 #, fuzzy msgid "hours" msgstr "%uhours" #: quotasys.c:525 #, fuzzy msgid "day" msgstr "%ddays" #: quotasys.c:525 #, fuzzy msgid "days" msgstr "%ddays" #: quotasys.c:583 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:585 msgid "K" msgstr "" #: quotasys.c:587 msgid "M" msgstr "" #: quotasys.c:589 msgid "G" msgstr "" #: quotasys.c:591 msgid "T" msgstr "" #: quotasys.c:594 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:598 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:651 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:655 msgid "k" msgstr "" #: quotasys.c:657 msgid "m" msgstr "" #: quotasys.c:659 msgid "g" msgstr "" #: quotasys.c:661 msgid "t" msgstr "" #: quotasys.c:664 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:668 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:827 #, fuzzy, c-format msgid "Cannot stat quota file %s: %s\n" msgstr "Impossible d'excuter stat() sur le fichier de quotas %s : %s\n" #: quotasys.c:975 msgid "Not all specified mountpoints are using quota.\n" msgstr "Les points de montage spcifis n'utilisent pas tous les quotas.\n" #: quotasys.c:989 #, c-format msgid "Error while releasing file on %s\n" msgstr "Erreur lors de la libration fichier sur %s\n" #: quotasys.c:1048 #, fuzzy, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "Impossible de crer le set pour sigaction() : %s\n" #: quotasys.c:1051 #, fuzzy, c-format msgid "Cannot set signal handler: %s\n" msgstr "Impossible de mettre en place le gestionnaire de signal : %s\n" #: quotasys.c:1107 #, fuzzy, c-format msgid "Cannot reset signal handler: %s\n" msgstr "Impossible de rinitialiser le gestionnaire de signal : %s\n" #: quotasys.c:1262 #, fuzzy msgid "Cannot open any file with mount points.\n" msgstr "" "Impossible d'ouvrir le fichier contenant les administrateurs de groupes : " "%s\n" #: quotasys.c:1280 #, fuzzy, c-format msgid "Cannot get device name for %s\n" msgstr "Impossible d'obtenir le nom de priphrique pour %s\n" #: quotasys.c:1340 #, fuzzy, c-format msgid "Cannot resolve mountpoint path %s: %s\n" msgstr "Impossible de rsoudre le chemin du point de montage %s : %s\n" #: quotasys.c:1346 #, fuzzy, c-format msgid "Cannot statfs() %s: %s\n" msgstr "Impossible d'excuter statfs() sur %s : %s\n" #: quotasys.c:1358 #, fuzzy, c-format msgid "Cannot stat() mounted device %s: %s\n" msgstr "Impossible d'excuter stat() sur le priphrique mont %s : %s\n" #: quotasys.c:1363 #, fuzzy, c-format msgid "" "Device (%s) filesystem is mounted on unsupported device type. Skipping.\n" msgstr "" "Le priphrique (%s) sur lequel est mont le systme de fichiers n'est pas " "un priphrique bloc ou caractre ni un montage loopback ou nomm. " "Rejet.\n" #: quotasys.c:1373 #, fuzzy, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "Impossible d'excuter stat() sur le point de montage %s : %s\n" #: quotasys.c:1442 #, fuzzy, c-format msgid "" "Cannot find a device with %s.\n" "Skipping...\n" msgstr "" "Impossible de trouver dans les options le priphrique de montage de la " "loopback pour %s. Rejet.\n" #: quotasys.c:1446 #, fuzzy, c-format msgid "" "Cannot stat() a mountpoint with %s: %s\n" "Skipping...\n" msgstr "" "Impossible d'excuter stat() sur le point de montage donn %s : %s\n" "Rejet...\n" #: quotasys.c:1454 #, fuzzy, c-format msgid "" "Cannot stat() given mountpoint %s: %s\n" "Skipping...\n" msgstr "" "Impossible d'excuter stat() sur le point de montage donn %s : %s\n" "Rejet...\n" #: quotasys.c:1464 #, fuzzy, c-format msgid "Cannot find a filesystem mountpoint for directory %s\n" msgstr "" "Impossible de trouver le point de montage du systme de fichiers pour le " "rpertoire %s\n" #: quotasys.c:1470 #, fuzzy, c-format msgid "Cannot resolve path %s: %s\n" msgstr "Impossible de rsoudre le chemin %s : %s\n" #: quotasys.c:1481 #, fuzzy, c-format msgid "Cannot find mountpoint for device %s\n" msgstr "Impossible de trouver le point de montage pour le priphrique %s\n" #: quotasys.c:1487 #, c-format msgid "Specified path %s is not directory nor device.\n" msgstr "Le chemin spcifi %s n'est ni un rpertoire ni un priphrique.\n" #: quotasys.c:1495 msgid "No correct mountpoint specified.\n" msgstr "Aucun point de montage correct spcifi.\n" #: quotasys.c:1550 #, fuzzy, c-format msgid "Mountpoint (or device) %s not found or has no quota enabled.\n" msgstr "Point de montage (ou priphrique) %s introuvable.\n" #: rquota_svc.c:86 #, fuzzy, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -s --no-setquota disables remote calls to setquota (default)\n" " -S --setquota enables remote calls to setquota\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" "Utilisation : %s [options]\n" "Avec pour options :\n" " -h --help affichage de ce texte\n" " -V --version affiche les informations de version\n" " -F --foreground dmarre le service quotas en avant-plan\n" " -s --no-setquota dsactive l'utilisation d'appels distants setquota " "(dfaut)\n" " -S --setquota active l'utilisation d'appels distants setquota\n" #: rquota_svc.c:97 #, fuzzy, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" "Utilisation : %s [options]\n" "Avec pour options :\n" " -h --help affichage de ce texte\n" " -V --version affiche les informations de version\n" " -F --foreground dmarre le service quotas en avant-plan\n" " -s --no-setquota dsactive l'utilisation d'appels distants setquota " "(dfaut)\n" " -S --setquota active l'utilisation d'appels distants setquota\n" #: rquota_svc.c:144 #, c-format msgid "Illegal port number: %s\n" msgstr "" #: rquota_svc.c:151 #, fuzzy, c-format msgid "Cannot access the specified xtab file %s: %s\n" msgstr "Impossible de crer le nouveau fichier de quotas %s : %s\n" #: rquota_svc.c:189 #, c-format msgid "unknown address family %u for RPC request\n" msgstr "" #: rquota_svc.c:195 #, c-format msgid "failed to translate address for RPC request: %s\n" msgstr "" #: rquota_svc.c:204 #, c-format msgid "host %s attempted to call setquota when disabled\n" msgstr "La machine %s a tent d'appeler setquota alors qu'il est dsactiv\n" #: rquota_svc.c:211 #, c-format msgid "host %s attempted to call setquota from port >= 1024\n" msgstr "La machine %s a tent d'appeler setquota depuis un port >= 1024\n" #: rquota_svc.c:226 #, c-format msgid "Denied access to host %s\n" msgstr "Accs refus la machine %s\n" #: rquota_svc.c:314 rquota_svc.c:400 msgid "unable to free arguments\n" msgstr "Imposible de librer les arguments\n" #: rquota_svc.c:423 #, c-format msgid "" "Warning: Cannot open export table %s: %s\n" "Using '/' as a pseudofilesystem root.\n" msgstr "" #: rquota_svc.c:474 #, fuzzy, c-format msgid "Failed to access local netconfig database: %s\n" msgstr "chec de la suppression des quotas : %s\n" #: rquota_svc.c:483 #, fuzzy, c-format msgid "Failed to create %s service.\n" msgstr "Impossible de crer le service udp.\n" #: rquota_svc.c:488 #, fuzzy, c-format msgid "Unable to register (RQUOTAPROG, RQUOTAVERS, %s).\n" msgstr "Impossible d'enregistrer (RQUOTAPROG, RQUOTAVERS, udp).\n" #: rquota_svc.c:494 #, fuzzy, c-format msgid "Unable to register (RQUOTAPROG, EXT_RQUOTAVERS, %s).\n" msgstr "Impossible d'enregistrer (RQUOTAPROG, EXT_RQUOTAVERS, udp).\n" #: rquota_svc.c:542 msgid "svc_run returned\n" msgstr "Retour de svc_run\n" #: set_limits_example.c:20 #, c-format msgid "copy_user_quota_limits: Failed to set userquota for uid %ld : %s\n" msgstr "" "copy_user_quota_limits : chec dans le rglage des quotas utilisateur pour " "l'uid %ld : %s\n" #: set_limits_example.c:27 #, c-format msgid "copy_user_quota_limits: Failed to get userquota for uid %ld : %s\n" msgstr "" "copy_user_quota_limits : chec dans la rcupration des quotas utilisateur " "pour l'uid %ld : %s\n" #: set_limits_example.c:43 #, fuzzy, c-format msgid "copy_group_quota_limits: Failed to set groupquota for gid %ld : %s\n" msgstr "" "copy_group_quota_limits : chec dans le rglage des quotas groupe pour l'uid " "%ld : %s\n" #: set_limits_example.c:50 #, fuzzy, c-format msgid "copy_group_quota_limits: Failed to get groupquota for gid %ld : %s\n" msgstr "" "copy_group_quota_limits : chec dans la rcupration des quotas groupe pour " "l'uid %ld : %s\n" #: svc_socket.c:75 #, c-format msgid "Unrecognized bind address family: %s\n" msgstr "" #: svc_socket.c:85 #, c-format msgid "Unrecognized bind address protocol: %s\n" msgstr "" #: svc_socket.c:95 #, c-format msgid "Unrecognized address semantics: %lu\n" msgstr "" #: svc_socket.c:103 #, fuzzy, c-format msgid "Failed to construct bind address: %s\n" msgstr "Impossible d'excuter bind() avec l'adresse donne : %s\n" #: svc_socket.c:117 #, fuzzy, c-format msgid "Error creating socket: %s\n" msgstr "Impossible de crer la socket : %s\n" #: svc_socket.c:124 #, fuzzy, c-format msgid "Cannot set IPv6 socket options: %s\n" msgstr "Impossible de fixer les options de la socket : %s\n" #: svc_socket.c:131 #, c-format msgid "Cannot set socket options: %s\n" msgstr "Impossible de fixer les options de la socket : %s\n" #: svc_socket.c:137 #, fuzzy, c-format msgid "Cannot bind to address: %s\n" msgstr "Impossible d'excuter bind() avec l'adresse donne : %s\n" #: svc_socket.c:144 #, fuzzy, c-format msgid "Cannot listen to address: %s\n" msgstr "Impossible d'excuter bind() avec l'adresse donne : %s\n" #: xqmstats.c:32 xqmstats.c:37 msgid "The running kernel does not support XFS\n" msgstr "Le noyau en cours d'excution de supporte pas XFS\n" #: xqmstats.c:50 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "Statistiques dquot du gestionnaire de quotas XFS\n" #: xqmstats.c:51 #, c-format msgid " reclaims: %u\n" msgstr " demandes : %u\n" #: xqmstats.c:52 #, c-format msgid " missed reclaims: %u\n" msgstr " demandes manques : %u\n" #: xqmstats.c:53 #, c-format msgid " dquot dups: %u\n" msgstr " dquot en double : %u\n" #: xqmstats.c:54 #, c-format msgid " cache misses: %u\n" msgstr " dfaut de cache : %u\n" #: xqmstats.c:55 #, c-format msgid " cache hits: %u\n" msgstr " succs cache : %u\n" #: xqmstats.c:56 #, c-format msgid " dquot wants: %u\n" msgstr " besoins dquot : %u\n" #: xqmstats.c:57 #, c-format msgid " shake reclaims: %u\n" msgstr " demandes entames : %u\n" #: xqmstats.c:58 #, c-format msgid " inact reclaims: %u\n" msgstr " demandes inactives : %u\n" #: xqmstats.c:63 #, c-format msgid "Maximum %u dquots (currently %u incore, %u on freelist)\n" msgstr "Maximum %u dquots (actuellement %u inclus, %u sur liste libre)\n" #: edquota.c:50 #, c-format msgid "" "Usage:\n" "\tedquota %1$s[-u] [-F formatname] [-p username] [-f filesystem] " "username ...\n" "\tedquota %1$s-g [-F formatname] [-p groupname] [-f filesystem] " "groupname ...\n" "\tedquota %1$s-P [-F formatname] [-p projectname] [-f filesystem] " "projectname ...\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -T username|groupname|" "projectname ...\n" msgstr "" #: edquota.c:55 msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" "-P, --project edit project data\n" msgstr "" #: edquota.c:61 msgid "" "-r, --remote edit remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" #: edquota.c:64 msgid "" "-F, --format=formatname edit quotas of a specific format\n" "-p, --prototype=name copy data from a prototype user/group\n" " --always-resolve always try to resolve name, even if it is\n" " composed only of digits\n" "-f, --filesystem=filesystem edit data only on a specific filesystem\n" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace time of a user/group\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: edquota.c:159 #, fuzzy msgid "" "Prototype name does not make sense when editing grace period or times.\n" msgstr "" "Un prototype d'utilisateur n'a pas lieu d'tre pour la modification des " "temps de sursis.\n" #: edquota.c:163 #, fuzzy msgid "Cannot change grace times over RPC protocol.\n" msgstr "Impossible d'crire les temps de sursis dans le fichier.\n" #: edquota.c:181 #, fuzzy, c-format msgid "Cannot get quota information for user %s\n" msgstr "Impossible d'obtenir le nom du fichier de quotas pour %s\n" #: edquota.c:187 msgid "fsname mismatch\n" msgstr "Incohrence de fsname\n" #: edquota.c:231 msgid "No filesystems with quota detected.\n" msgstr "Aucun systme de fichier avec quotas dtect.\n" #: edquota.c:247 #, fuzzy, c-format msgid "Cannot create temporary file: %s\n" msgstr "Impossible de r-ouvrir le fichier temporaire : %s\n" #: edquota.c:252 #, fuzzy, c-format msgid "Cannot change owner of temporary file: %s\n" msgstr "Impossible de dupliquer le descripteur du fichier temporaire : %s\n" #: edquota.c:259 #, fuzzy msgid "Cannot write grace times to file.\n" msgstr "Impossible d'crire les temps de sursis dans le fichier.\n" #: edquota.c:264 edquota.c:283 edquota.c:316 edquota.c:335 #, fuzzy msgid "Cannot stat file with times.\n" msgstr "" "Impossible d'ouvrir le fichier contenant les administrateurs de groupes : " "%s\n" #: edquota.c:270 msgid "Error while editing grace times.\n" msgstr "Erreur lors de la modification des temps de sursis.\n" #: edquota.c:281 edquota.c:333 #, fuzzy msgid "Cannot reopen!\n" msgstr "Impossible d'ouvrir %s : %s\n" #: edquota.c:291 msgid "Failed to parse grace times file.\n" msgstr "chec lors de l'analyse du fichier des temps de sursis.\n" #: edquota.c:301 #, fuzzy, c-format msgid "Cannot get quota information for user %s.\n" msgstr "Impossible d'obtenir le nom du fichier de quotas pour %s\n" #: edquota.c:304 #, fuzzy msgid "Cannot write individual grace times to file.\n" msgstr "Impossible d'crire les temps de sursis individuels dans le fichier.\n" #: edquota.c:310 #, fuzzy msgid "Cannot write quotas to file.\n" msgstr "Impossible d'crire les quotas dans le fichier.\n" #: edquota.c:322 msgid "Error while editing quotas.\n" msgstr "Erreur lors de la modification des quotas.\n" #: edquota.c:344 #, fuzzy msgid "Cannot read individual grace times from file.\n" msgstr "" "Impossible de lire les temps de sursis individuels depuis le fichier.\n" #: edquota.c:350 #, fuzzy msgid "Cannot read quotas from file.\n" msgstr "Impossible de lire les quotas depuis le fichier.\n" #: quota.c:58 #, fuzzy msgid "Usage: quota [-guPqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "Utilisation : quota [-guqvs] [-l | -Q] [-F format_quota]\n" #: quota.c:59 #, fuzzy msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ...\n" msgstr "\tquota [-qvs] [-l | -Q] [-F format_quota] -u utilisateur ...\n" #: quota.c:60 #, fuzzy msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ...\n" msgstr "\tquota [-qvs] [-l | -Q] [-F format_quota] -g groupe ...\n" #: quota.c:61 #, fuzzy msgid "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -P projectname ...\n" msgstr "\tquota [-qvs] [-l | -Q] [-F format_quota] -g groupe ...\n" #: quota.c:62 #, fuzzy msgid "\tquota [-qvswugPQm] [-F quotaformat] -f filesystem ...\n" msgstr "\tedquota [-u|g] [-F nom_format] [-f systme_fichier] -t\n" #: quota.c:63 msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-P, --project display quota for project\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" " --always-resolve always try to translate name to id, even if it " "is\n" "\t\t\t composed of only digits\n" "-w, --no-wrap do not wrap long lines\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-l, --local-only do not query NFS filesystems\n" "-Q, --quiet-refuse do not print error message when NFS server " "does\n" " not respond\n" "-i, --no-autofs do not query autofs mountpoints\n" "-F, --format=formatname display quota of a specific format\n" "-f, --filesystem-list display quota information only for given\n" " filesystems\n" " --filesystem=path display quota information only for given\n" " filesystem, remaining command line arguments\n" " are still treated as user/group/project names\n" "-A, --all-nfs display quota for all NFS mountpoints\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" " --show-mntpoint show mount point of the file system in output\n" " --hide-device do not show file system device in output\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: quota.c:103 msgid "space" msgstr "" #: quota.c:105 msgid "blocks" msgstr "blocs" #: quota.c:107 #, fuzzy, c-format msgid "Disk quotas for %s %s (%cid %u): %s\n" msgstr "Quotas disque pour %s %s (%cid %d) : %s\n" #: quota.c:110 msgid "Filesystem" msgstr "Systme fichiers" #: quota.c:111 quota.c:112 msgid "quota" msgstr "quota" #: quota.c:111 quota.c:112 msgid "limit" msgstr "limite" #: quota.c:111 quota.c:112 msgid "grace" msgstr "sursis" #: quota.c:112 msgid "files" msgstr "fichiers" #: quota.c:193 msgid "File limit reached on" msgstr "Limite de fichiers atteinte" #: quota.c:199 msgid "In file grace period on" msgstr "Priode de sursis fichiers active" #: quota.c:203 msgid "Over file quota on" msgstr "Quota dpassement fichiers activ" #: quota.c:209 msgid "Block limit reached on" msgstr "Limite de blocs atteinte" #: quota.c:215 msgid "In block grace period on" msgstr "Priode de sursis blocs active" #: quota.c:219 msgid "Over block quota on" msgstr "Quota dpassement blocs activ" #: quota.c:282 msgid "no limited resources used" msgstr "" #: quota.c:390 #, fuzzy msgid "Not enough memory for filesystem names" msgstr "Pas assez de mmoire.\n" #: quota.c:407 #, c-format msgid "Warning: Ignoring -%c when filesystem list specified.\n" msgstr "" #: quota.c:416 #, fuzzy msgid "No filesystem specified.\n" msgstr "Aucun systme de fichier avec quotas dtect.\n" #: quota.c:424 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "" #: quota.c:430 #, fuzzy, c-format msgid "getgroups(): %s\n" msgstr "quota : getgroups() : %s\n" #: quota.c:435 #, fuzzy msgid "Project reports not supported without project name\n" msgstr "Ce format de quotas n'est pas support par le noyau.\n" #: common.c:129 #, c-format msgid "Quota utilities version %s.\n" msgstr "Utilitaires quotas version %s.\n" #: common.c:130 #, fuzzy, c-format msgid "Compiled with:%s\n" msgstr "Compil avec " #~ msgid "Line %d too long. Truncating.\n" #~ msgstr "Ligne %d trop longue. Tronque.\n" #~ msgid "Error in config file (line %d), ignoring\n" #~ msgstr "Erreur dans le fichier de configuration (ligne %d), ignore\n" #~ msgid "Possible error in config file (line %d), ignoring\n" #~ msgstr "" #~ "Erreur probable dans le fichier de configuration (ligne %d), ignore\n" #, fuzzy #~ msgid "Cannot duplicate descriptor of file to write to: %s\n" #~ msgstr "Impossible de dupliquer le descripteur du fichier crire : %s\n" #, fuzzy #~ msgid "Cannot duplicate descriptor of temp file: %s\n" #~ msgstr "Impossible de dupliquer le descripteur du fichier temporaire : %s\n" #, fuzzy #~ msgid "Cannot duplicate descriptor of file to edit: %s\n" #~ msgstr "Impossible de dupliquer le descripteur du fichier diter : %s\n" #, fuzzy #~ msgid "cannot create TCP service.\n" #~ msgstr "Impossible de crer le service udp.\n" #, fuzzy #~ msgid "unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n" #~ msgstr "Impossible d'enregistrer (RQUOTAPROG, RQUOTAVERS, udp).\n" #, fuzzy #~ msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" #~ msgstr "Impossible d'enregistrer (RQUOTAPROG, EXT_RQUOTAVERS, udp).\n" #~ msgid "Error while editing individual grace times.\n" #~ msgstr "Erreur lors de la modification des temps de sursis individuels.\n" #~ msgid "RPC and EXT2_DIRECT" #~ msgstr "RPC et EXT2_DIRECT" #~ msgid "RPC" #~ msgstr "RPC" #~ msgid "EXT2_DIRECT" #~ msgstr "EXT2_DIRECT" #~ msgid "" #~ "Utility for converting quota files.\n" #~ "Usage:\n" #~ "\t%s [-u] [-g] [-e|-f] mountpoint\n" #~ msgstr "" #~ "Utilitaire pour convertir les fichiers de quotas.\n" #~ "Utilisation :\n" #~ "\t%s [-u] [-g] [-e|-f] point_montage\n" #~ msgid "Bad number of arguments." #~ msgstr "Mauvais nombre d'arguments." #~ msgid "Can't rename new quotafile %s to name %s: %s\n" #~ msgstr "" #~ "Impossible de renommer le nouveau fichier de quotas %s vers %s : %s\n" #~ msgid "" #~ "Usage:\tedquota [-r] [-u] [-F formatname] [-p username] [-f filesystem] " #~ "username ...\n" #~ msgstr "" #~ "Utilisation : \tedquota [-r] [-u] [-F nom_format] [-p utilisateur] [-f " #~ "systme_fichier] utilisateur ...\n" #~ msgid "" #~ "\tedquota [-r] -g [-F formatname] [-p groupname] [-f filesystem] " #~ "groupname ...\n" #~ msgstr "" #~ "\tedquota [-r] -g [-F nom_format] [-p nom_groupe] [-f systme_fichier] " #~ "groupe ...\n" #~ msgid "\tedquota [-r] [-u|g] [-F formatname] [-f filesystem] -t\n" #~ msgstr "\tedquota [-r] [-u|g] [-F nom_format] [-f systme_fichier] -t\n" #~ msgid "" #~ "\tedquota [-r] [-u|g] [-F formatname] [-f filesystem] -T username|" #~ "groupname ...\n" #~ msgstr "" #~ "\tedquota [-r] [-u|g] [-F nom_format] [-f systme_fichier] -T utilisateur|" #~ "groupe ...\n" #~ msgid "" #~ "Usage:\tedquota [-u] [-F formatname] [-p username] [-f filesystem] " #~ "username ...\n" #~ msgstr "" #~ "Utilisation :\tedquota [-u] [-F nom_format] [-p utilisateur] [-f " #~ "systme_fichier] utilisateur ...\n" #~ msgid "" #~ "\tedquota -g [-F formatname] [-p groupname] [-f filesystem] " #~ "groupname ...\n" #~ msgstr "" #~ "\tedquota -g [-F nom_format] [-p groupe] [-f systme_fichier] groupe ...\n" #~ msgid "" #~ "\tedquota [-u|g] [-F formatname] [-f filesystem] -T username|" #~ "groupname ...\n" #~ msgstr "" #~ "\tedquota [-u|g] [-F nom_format] [-f systme_fichier] -T utilisateur|" #~ "groupe ...\n" #~ msgid "" #~ "Utility for checking and repairing quota files.\n" #~ "%s [-gucfinvdmMR] [-F <quota-format>] filesystem|-a\n" #~ msgstr "" #~ "Utilitaire pour vrifier et rparer les fichiers de quotas.\n" #~ "%s [-gucfinvdmMR] [-F <format_quotas>] systme_fichier|-a\n" #~ msgid "XFS quota format needs no checking.\n" #~ msgstr "Le format de quotas XFS n'a pas besoin de vrification.\n" #~ msgid "Too new quotafile format on %s\n" #~ msgstr "Format de fichier de quotas trop rcent sur %s\n" #~ msgid "Can't open quotafile %s: %s\n" #~ msgstr "Impossible d'ouvrir le fichier de quotas %s : %s\n" #~ msgid "" #~ "Usage:\n" #~ "\t%s [-guvp] [-F quotaformat] [-x state] -a\n" #~ "\t%s [-guvp] [-F quotaformat] [-x state] filesys ...\n" #~ msgstr "" #~ "Utilisation :\n" #~ "\t%s [-guvp] [-F formatquotas] [-x tat] -a\n" #~ "\t%s [-guvp] [-F formatquotas] [-x tat] systmefichiers ...\n" #~ msgid "Enabling %s quota accounting on %s\n" #~ msgstr "Activation de la prise en compte des quotas %s sur %s\n" #~ msgid "Quotas for %s %s:\n" #~ msgstr "Quotas pour %s %s :\n" #~ msgid "%s %d, limits (soft = %d, hard = %d)\n" #~ msgstr "%s %d, limites (souple = %d, stricte = %d)\n" #~ msgid "blocks in use:" #~ msgstr "blocs utiliss :" #~ msgid "\tinodes in use:" #~ msgstr "\tinodes utiliss :" #~ msgid "%s - bad format\n" #~ msgstr "%s - format incorrect\n" #~ msgid "%s - %s -- bad format\n" #~ msgstr "%s - %s -- format incorrect\n" #~ msgid " blocks in use: %Lu, limits (soft = %Lu, hard = %Lu)" #~ msgstr "blocs utiliss : %Lu, limites (souple = %Lu, stricte = %Lu)" #~ msgid "%s - %s -- bad format\n" #~ msgstr "%s - %s -- format incorrect\n" #~ msgid "\tinodes in use: %Lu, limits (soft = %Lu, hard = %Lu)" #~ msgstr "\tinodes utiliss : %Lu, limites (souple = %Lu, stricte = %Lu)" #~ msgid "block grace period: %s, file grace period: %s\n" #~ msgstr "priode de sursis bloc : %s, priode de sursis fichier : %s\n" #~ msgid " block grace period: %d %s file grace period: %d %s" #~ msgstr " priode de sursis bloc : %d %s priode de sursis fichier : %d %s" #~ msgid "Unknown format" #~ msgstr "Format inconnu" #~ msgid "Too many mountpoints with quota. Contact %s\n" #~ msgstr "Trop de points de montage avec quotas. Contactez %s\n" #~ msgid "Can't open %s: %s\n" #~ msgstr "Impossible d'ouvrir %s : %s\n" #~ msgid "Can't stat() loopback device %s: %s\n" #~ msgstr "Impossible d'excuter stat() sur le priphrique loopback %s : %s\n" #~ msgid "Loopback device %s isn't block device!\n" #~ msgstr "" #~ "Le priphrique loopback %s n'est pas un priphrique en mode bloc !\n" #~ msgid "Can't stat() mountpoint %s: %s\n" #~ msgstr "Impossible d'excuter stat() sur le point de montage %s : %s\n" #~ msgid "" #~ "Utility for reporting quotas.\n" #~ "Usage:\n" #~ "%s [-vugs] [-c|C] [-t|n] [-F quotaformat] (-a | mntpoint)\n" #~ msgstr "" #~ "Utilitaire de gnration de rapports pour les quotas.\n" #~ "Utilisation :\n" #~ "%s [-vugs] [-c|C] [-t|n] [-F formatquotas] (-a | pointmontage)\n" #~ msgid "" #~ "Usage: %s [options]\n" #~ "Options are:\n" #~ " -h --help shows this text\n" #~ " -V --version shows version information\n" #~ " -F --foreground starts the quota service in foreground\n" #~ msgstr "" #~ "Utilisation : %s [options]\n" #~ "Avec pour options :\n" #~ " -h --help affiche ce texte\n" #~ " -V --version affiche les informations de version\n" #~ " -F --foreground dmarre le service quotas en avant-plan\n" #~ msgid "cannot create tcp service.\n" #~ msgstr "impossible de crer le service tcp.\n" #~ msgid "unable to register (RQUOTAPROG, RQUOTAVERS, tcp).\n" #~ msgstr "Imposible d'enregistrer (RQUOTAPROG, RQUOTAVERS, tcp).\n" #~ msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, tcp).\n" #~ msgstr "Impossible d'enregistrer (RQUOTAPROG, EXT_RQUOTAVERS, tcp).\n" #~ msgid "" #~ "Usage:\n" #~ " setquota [-u|-g] [-r] [-F quotaformat] <user|group>\n" #~ "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> " #~ "-a|<filesystem>...\n" #~ " setquota [-u|-g] [-r] [-F quotaformat] <-p protouser|protogroup> <user|" #~ "group> -a|<filesystem>...\n" #~ " setquota [-u|-g] [-F quotaformat] -t <blockgrace> <inodegrace> -a|" #~ "<filesystem>...\n" #~ " setquota [-u|-g] [-F quotaformat] <user|group> -T <blockgrace> " #~ "<inodegrace> -a|<filesystem>...\n" #~ msgstr "" #~ "Utilisation :\n" #~ " setquota [-u|-g] [-r] [-F formatquotas] <utilisateur|groupe>\n" #~ "\t<limite_souple_bloc> <limite_stricte_bloc> <limite_souple_inode> " #~ "<limite_stricte_inode> -a|<systme_fichiers>...\n" #~ " setquota [-u|-g] [-r] [-F formatquotas] <-p utilisateur_prototype|" #~ "groupe_prototype> <utilisateur|groupe> -a|<systme_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] -t <sursis_bloc> <sursis_inode> -a|" #~ "<systmes_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] <utilisateur|groupe> -T " #~ "<sursis_bloc> <sursis_inode> -a|<systme_fichiers>...\n" #~ msgid "" #~ "Usage:\n" #~ " setquota [-u|-g] [-F quotaformat] <user|group>\n" #~ "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> " #~ "-a|<filesystem>...\n" #~ " setquota [-u|-g] [-F quotaformat] <-p protouser|protogroup> <user|" #~ "group> -a|<filesystem>...\n" #~ " setquota [-u|-g] [-F quotaformat] -t <blockgrace> <inodegrace> -a|" #~ "<filesystem>...\n" #~ " setquota [-u|-g] [-F quotaformat] <user|group> -T <blockgrace> " #~ "<inodegrace> -a|<filesystem>...\n" #~ msgstr "" #~ "Utilisation :\n" #~ " setquota [-u|-g] [-F formatquotas] <utilisateur|groupe>\n" #~ "\t<limite_souple_bloc> <limite_stricte_bloc> <limite_souple_inode> " #~ "<limite_stricte_inode> -a|<systme_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] <-p utilisateur_prototype|" #~ "groupe_prototype> <utilisateur|groupe> -a|<systme_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] -t <sursis_bloc> <sursis_inode> -a|" #~ "<systme_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] <utilisateur|groupe> -T " #~ "<sursis_bloc> <sursis_inode> -a|<systme_fichiers>...\n" #~ msgid "" #~ "Usage:\n" #~ " warnquota [-ug] [-F quotaformat] [-c configfile] [-q quotatabfile]\n" #~ msgstr "" #~ "Utilisation :\n" #~ " warnquota [-ug] [-F formatquotas] [-c fichierconfig] [-q " #~ "fichierquotatab]\n" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/insert-header.sin���������������������������������������������������������������������0000664�0000000�0000000�00000001240�14463210551�0016460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 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 } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/pl.gmo��������������������������������������������������������������������������������0000664�0000000�0000000�00000171610�14463210551�0014343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������w��l������H'��3���I'��D���}'��C���'��@���(����G(���� *��=���+��K���+��Y���$,��C���~,�����,�����,�����,�����-�����-�����5-�����L-�����c-��B���z-�� ���-�����-�����-��0���-��)���.�����I.�����i.�����.�����.�� ���.�����.�����.�����/�����/�����7/�����V/��0���t/�����/�����/�����/�� ���/�� ���/��&���/��&��� 0��7��30�����k2�����2�����q3��2���z3�� ���3��&���3�����3��9���4��8���O4��"���4��-���4�����4�����4�����5��G���5�����^5�����n5�����5�����5�����5��A���5��7���6��3���?6�����s6��!���y6�����6�� ���6��+���6�����6�� ���7�� ��� 7��-���7��5���H7��-���~7��*���7��#���7��#���7��?���8��"���_8��%���8��"���8��.���8��4���8��#���/9�����S9��&���k9��!���9��A���9��Q���9��6���H:�� ���:�����:�����:��*���:��5���:��'���*;��.���R;��M���;��%���;��9���;��7���/<��&���g<�����<��4���<�����<��<���<�����0=��8���J=�� ���=��"���=��(���=��1���=��)���">��*���L>��!���w>�����>��O���>��*���?��/���0?��#���`?��"���?��&���?�����?��*���?��(��� @�����6@��/���O@��"���@��*���@��%���@�����@����� A�����'A��/���DA��3���tA�����A��2���A��.���A��)���$B��%���NB��.���tB��(���B��-���B��*���B�����%C�����DC��2���bC��G���C�����C��V���D��.���D��)��� E�� ���7E��&���XE�����E��&���E��2���E��*���E��8��� F��1���YF�����F�����F��/���F�����F�����G��D���6G�����{G��3���G��2���G��$���H�� ���&H�����GH��C���_H��$���H��T���H��S���I��#���qI�����I�����I��"���I��-���I�����J��$���?J�����dJ��$���J�����J�����J�����J��5���J�����*K��%���=K�����cK�����K��!���K��0���K�����K��(���L��.���:L�� ���iL�����wL�����L��H���L��$���L��'���M��!���AM��$���cM��$���M�����M�����M�����M��,���M��$���,N��=���QN��!���N�����N�����N�����N�����N��!���O�����8O��9���UO��5���O��*���O��!���O��0���P��%���CP�����iP�� ���yP�����P��6���P��6���P��"���Q��2���1Q��7���dQ��3���Q��6���Q�����R�����R�� ���.R��L���9R�����R�����R�����R�����R�����R��_��� S��m���mS�����S��#���S��3���T�����PT�����VT��2���hT�����T��}���'U�����U��n���U��(���(V�����QV�����jV�����V�����W��G���W�����cW��'���hW�� ���W��2���W�����W�����W�����X��i���"X�� ���X�����X��,���X��8���X��1���Y��N���CY��<���Y��#���Y��=���Y�����1Z��(���LZ��)���uZ��!���Z�����Z��$���Z��5����[��/���6[��*���f[�����[��1���[��F���[��F���\�� ���e\�� ���\�����\�����\�����\�����\�����]��1���6]�����h]�����]�����]��J���]��%���]������^��4���^��4���J^�����^�����^��9���^��7���^��G���_��G���`_��6���_��0���_��0���`��W���A`��x���`��*���a��:���=a��O���xa�����a��,���Lb��&���yb��'���b��K���b��S���c��D���hc�����c�����c�����c��3��� d�����>d��$���\d�����d�����d��*���d��,���d�����e��1���"e��-���Te��X���e�����e�����e��P���f�����Xf�����jf��2���zf�����f��;���f��/���f��J���g�����jg��.���g��(���g��4���g��0���h�����@h��I���`h��H���h��1���h��2���%i��2���Xi��(���i�����i��(���i��$���i��N���j�����jj�����j����Kk��q��8m��j��n�����p����p����7t��N���v��5���fv��5���v��.���v��N���w��)���Pw��M���zw��8���w�����x��O��� x��)���Yx��6���x��$���x��1���x��#���y��*���5y��'���`y��<���y�����y��X���kz�����z�����z�����z�����z����� {�����+{�����2{��I���M{��C���{��C���{��A���|��A���a|�����|�����|�����|��.���|�����|��$���|��%���#}��5���I}��4���}�����}�����}�����}�����}��7���}�����6~�����G~�����X~�����n~�����~�����~�����~�����~�����~��5���~��1��� �����<�����A�����G��N���M�������������������������������� ����������������������������,�����3�����;�����V�����\��#���n��"���������� ���π�����ـ����������������������H��,��K���u��;�����A�����D���?����������A���`��W�����`�����W���[����������̈��������������������2�����K�����d��H���}�� ���Ɖ�����Љ�����׉��=�����/���3�����c�����������������9���݊��2��������J�����R�����m������������;���Ƌ�� ��������#�� ���*�����4�� ���=��-���G��-���u���������5�����ɏ�����\��6���e�� �����)�����)�����?�����J���Q��4�����6���ё��+��������4�����R��Y���q�����˒��/���ܒ��!��� ��"���.�����Q��J���o��A�����K��������H��+���P�����|�� �����S�����$�������������+��,���A��G���n��K�����9�����&���<��)���c��G�����)���Ֆ��3�����5���3��9���i��D�����2����� �����0���<��,���m��P�����^�����B���J��%�������������͙��4�����G���"��=���j��;�����]�����:���B��S���}��G���ћ��9��������S��E���q��-�����V�����$���<��G���a��*�����1���ԝ��8�����<���?��>���|��?�����0�����/���,��V���\��:�����=�����3���,��+���`��;��������Ƞ��>�����;���$��"���`��7�����2�����?�����6���.�� ���e��+�����+�����C���ޢ��B���"��"���e��=�����>���ƣ��8�����8���>��E���w��8�����9�����6���0��'���g��,�����L�����U��� �����_��l���F��=�����>�����.���0��:���_��(�����2���è��X�����K���O��G�����<�����*��� ��&���K��E���r��,�����6�����X�����2���u��G�����M�����>���>��8���}��$�����V���۬��;���2��d���n��c���ӭ��6���7��+���n��#�����8�����E�����)���=��.���g��'�����&�����+�����+��������=��J���P�������'�����,���ְ��&�����-���*��A���X��.�����/���ɱ��8��������2��&���B�����i��h�����+�����2����� ���M��)���n��"�����(����������.�����E���&��)���l��B�����3���ٴ����� �����+��1���2��#���d��1����� �����C���۵��;�����8���[��&�����:�����1��������(�����9��&���H��R���o��T���·��<�����E���T��R�����C�����N���1�������$��������ù��S���ҹ��2���&��.���Y�������#�����"���ź��i�����u���R��"���Ȼ��2�����@��������_�����e��C���}�����������������~���0��.��������޾�������%�����%���ſ��S����� ���?��/���J�����z��3����������$�����!�����s��� ������������C�����B�����9���B��S���|��A�����*�����]���=�������/�����:�����)���%�����O��*���l��2�����;�����3��������:��:���N��^�����b�����*���K��"���v������������������������� ��9���(��*���b�� ����� �����P�����/��������%��B���D��B�����)�����)�����L�����C���k��L�����I�����I���F��4�����O�����_��������u��2�����C���(��Q���l�������=���T��/�����6�����m�����Y���g��E����������.���&��&���U��@���|��(�����*�����#�����+���5��7���a��2����������+�����@��� ��i���M������������O��������6�����I��;���[�������H�����:�����S���#�����w��;�����'�����<�����6���.��$���e��U�����c�����B���D��C�����@�����.��� �� ���;��1���\��%�����P���������������<������K������ �����c����R��.��P�����?�����C�����2���V��P�����6�����P�����C���b�������n�����/�����F���K��D�����/�����+�����=���3��0���q��:����������X�������� �������!���+��"���M��.���p�������#�����M�����S�����R���k��W�����X��������o�����v�� ���z��>�����"�����1�����3�����<���L��A�����!�����"�����.��������?��>���E��&����������)�����+�����)�����+���<�����h�����o�����u��6�����I��������������������`���$����������������� ����� ����� ����� ����������������������������'�����/��!���6�����X�����`��5���u��4����� ����������)��� �� ���4�� ���B�����O�����m������� ���������>���O��������U���������������������d�����������a�����������������(���L�����������7����'���0�����]��������������*��x���P���,������i���������������������������H����������������������/�������*���)���������������z������������g��������������l����������������!����������������������w���9��F���4���������O�����������}����j�����;��������}�������������3��i���z������8���m�������������.�����������D���.��������������I���������������������� ����������$���o������������@��;�������L������������������������������^�� ������ ��]��n�������h�������%�������t�������1������������������?������������`����������"��������������������r�����W����2���=��������������8��������m������������7���������������B�����n���o�������C������~���������Q���b��:����������������9�������r����������`��p���G��{��%������<�������������������������|���#�����5��������g��l����� �����������������/��!��f������������������������A�������������-��^��������������N���v����������������2��U��d����������q������y������5�������T���M����������� �����A������������y�����������������������������������?�����������������������s������������I���v��+���������������������������\��� ������p��a���������������������������������=��c����E������������u������������W�������'��1������������~������������Z����������������Z���������������������������������������������������������G������������J����������(�������������������������������>��������b���Y����� ������������������������"�����������[�������c���������� ���������������������X������V�����������������������h��x����������F����_���������������������@���\��N�����J������j����������k�����������������q�����������������������������������������������������3����������)����������[�������������������|��������������������0���6����������S����������R�����C�� ���$������������������t�����-���&���e��K�����������#������������������������S�����D������K���M������e�������_�������T��Q������E�����k��s������������f�����������V����������,���{���R����������B������ �������&����� �����������X��������Y�����+���<�����6���u�������4��H�����:��P��w���������������� Adding %s size %lld ino %d links %d uid %u gid %u � quota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ... � quota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ... � Block limits File limits � Please cleanup the group data before the grace period expires. Basically, this means that the system thinks group is using more disk space on the above partition(s) than it is allowed. If you do not delete files and get below group quota before the grace period expires, the system will prevent you and other members of the group from creating new files owned by the group. For additional assistance, please contact us at %s or via phone at %s. � We hope that you will cleanup before your grace period expires. Basically, this means that the system thinks you are using more disk space on the above partition(s) than you are allowed. If you do not delete files and get below your quota before the grace period expires, the system will prevent you from creating new files. For additional assistance, please contact us at %s or via phone at %s. � %s limits File limits � Filesystem block grace inode grace � Filesystem blocks soft hard inodes soft hard � Filesystem Block grace period Inode grace period � cache hits: %u � cache misses: %u � dquot dups: %u � dquot wants: %u � inact reclaims: %u � missed reclaims: %u � reclaims: %u � shake reclaims: %u �%-9s used soft hard grace used soft hard grace �%02d:%02d�%ddays�%s (gid %d): Permission denied �%s (gid %d): error while trying getgroups(): %s �%s (gid %d): gid set allocation (%d): %s �%s (uid %d): Permission denied �%s [%s]: %s quotas turned off �%s [%s]: %s quotas turned on �%s quota on %s (%s) is %s �%s quota sync failed for %s: %s �%s quota sync failed: %s �%s: %s �%s: %s quotas turned off �%s: %s quotas turned on �%s: %s root_squash turned off �%s: %s root_squash turned on �%s: Quota cannot be turned on on NFS filesystem �%s: deleted %s quota blocks �%udays�%uhours�%uminutes�%useconds�*** Report for %s quotas on device %s �*** Status for %s quotas on device %s �-F, --format=formatname edit quotas of a specific format -p, --prototype=name copy data from a prototype user/group --always-resolve always try to resolve name, even if it is composed only of digits -f, --filesystem=filesystem edit data only on a specific filesystem -t, --edit-period edit grace period -T, --edit-times edit grace time of a user/group -h, --help display this help text and exit -V, --version display version information and exit �-r, --remote edit remote quota (via RPC) -m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints �-r, --remote set remote quota (via RPC) -m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints �0seconds�Accounting [ondisk]: %s; Enforcement [ondisk]: %s �Accounting: %s; Enforcement: %s �Adding dquot structure type %s for %d �Adding hardlink for inode %llu �Administrator for a group %s not found. Cancelling mail. �Allocated %d bytes memory Free'd %d bytes Lost %d bytes �Already accounting %s quota on %s �As you wish... Canceling check of this file. �Bad block grace time�Bad block hardlimit�Bad block softlimit�Bad file magic or version (probably not quotafile with bad endianity). �Bad format: %s �Bad inode grace time�Bad inode hardlimit�Bad inode softlimit�Bad number of arguments. �Bad time units. Units are 'second', 'minute', 'hour', and 'day'. �Batch mode and prototype user cannot be used together. �Batch mode cannot be used for setting grace times. �Block�Block %u in tree referenced twice�Block %u is truncated. �Block %u: �Block grace time: %s; Inode grace time: %s �Block limit reached on�Bugs to %s �Bugs to: %s �Cannot access the specified xtab file %s: %s �Cannot allocate new quota block (out of disk space). �Cannot change grace times over RPC protocol. �Cannot change owner of temporary file: %s �Cannot change permission of %s: %s �Cannot change state of GFS2 quota. �Cannot change state of XFS quota. It's not compiled in kernel. �Cannot commit dquot for id %u: %s �Cannot connect to netlink socket: %s �Cannot connect to system DBUS: %s �Cannot create DBUS message: No enough memory. �Cannot create file for %ss for new format on %s: %s �Cannot create new quotafile %s: %s �Cannot create pipe: %s �Cannot create set for sigaction(): %s �Cannot create temporary file: %s �Cannot delete %s quota on %s - switch quota accounting off first �Cannot delete %s quota on %s - switch quota enforcement and accounting off first �Cannot detect quota format for journalled quota on %s �Cannot duplicate descriptor: %s �Cannot exec %s �Cannot execute '%s': %s �Cannot find a device with %s. Skipping... �Cannot find a filesystem mountpoint for directory %s �Cannot find any quota file to work on. �Cannot find checked quota file for %ss on %s! �Cannot find filesystem to check or filesystem not mounted with quota option. �Cannot find mountpoint for device %s �Cannot find quota file on %s [%s] to turn quotas on/off. �Cannot find quota option on filesystem %s with quotas! �Cannot finish IO on new quotafile: %s �Cannot fork: %s �Cannot gather quota data. Tree root node corrupted. �Cannot get device name for %s �Cannot get exact used space... Results might be inaccurate. �Cannot get host name: %s �Cannot get info for %s quota file from kernel on %s: %s �Cannot get name for uid/gid %u. �Cannot get name of new quotafile. �Cannot get name of old quotafile on %s. �Cannot get quota for %s %d from kernel on %s: %s �Cannot get quota information for user %s �Cannot get quota information for user %s. �Cannot get quotafile name for %s �Cannot get system info: %s �Cannot guess format from filename on %s. Please specify format on commandline. �Cannot initialize IO on new quotafile: %s �Cannot initialize IO on xfs/gfs2 quotafile: %s �Cannot initialize mountpoint scan. �Cannot initialize quota on %s: %s �Cannot join quota multicast group: %s �Cannot open %s: %s �Cannot open %s: %s Will use device names. �Cannot open any file with mount points. �Cannot open file %s: %s �Cannot open file with group administrators: %s �Cannot open new quota file %s: %s �Cannot open old format file for %ss on %s �Cannot open old quota file on %s: %s �Cannot open pipe: %s �Cannot open quotafile %s: %s �Cannot parse input line %d. �Cannot parse line %d in quotatab (missing ':') �Cannot parse time at CC_BEFORE variable (line %d). �Cannot read block %u: %s �Cannot read entry for id %u from quotafile %s: %s �Cannot read first entry from quotafile %s: %s �Cannot read header from quotafile %s: %s �Cannot read header of old quotafile. �Cannot read individual grace times from file. �Cannot read info from quota file %s: %s �Cannot read information about old quotafile. �Cannot read quota structure for id %u: %s �Cannot read quotas from file. �Cannot read stat file %s: %s �Cannot register callback for netlink messages: %s �Cannot remount filesystem %s read-write. cannot write new quota files. �Cannot remount filesystem mounted on %s read-only so counted values might not be right. Please stop all programs writing to filesystem or use -m flag to force checking. �Cannot remount filesystem mounted on %s read-only. Counted values might not be right. �Cannot rename new quotafile %s to name %s: %s �Cannot rename old quotafile %s to %s: %s �Cannot reset signal handler: %s �Cannot resolve mountpoint path %s: %s �Cannot resolve path %s: %s �Cannot resolve quota netlink name: %s �Cannot set both individual and global grace time. �Cannot set grace times over RPC protocol. �Cannot set info for %s quota file from kernel on %s: %s �Cannot set quota for %s %d from kernel on %s: %s �Cannot set signal handler: %s �Cannot set socket options: %s �Cannot stat device %s (maybe typo in quotatab) �Cannot stat directory %s: %s �Cannot stat mountpoint %s: %s �Cannot stat old %s quota file %s: %s. Usage will not be subtracted. �Cannot stat quota file %s: %s �Cannot stat() a mountpoint with %s: %s Skipping... �Cannot stat() given mountpoint %s: %s Skipping... �Cannot stat() mounted device %s: %s �Cannot stat() mountpoint %s: %s �Cannot statfs() %s: %s �Cannot switch off %s quota accounting on %s when enforcement is on �Cannot sync quotas on device %s: %s �Cannot turn %s quotas off on %s: %s Kernel won't know about changes quotacheck did. �Cannot turn %s quotas on on %s: %s Kernel won't know about changes quotacheck did. �Cannot turn on/off quotas via RPC. �Cannot wait for mailer: %s �Cannot write block (%u): %s �Cannot write grace times to file. �Cannot write individual grace times to file. �Cannot write quota (id %u): %s �Cannot write quota for %u on %s: %s �Cannot write quotas to file. �Checked %d directories and %d files �Checking quotafile headers... �Checking quotafile info... �Compiled with:%s �Continue checking assuming version from command line?�Corrupted blocks: �Corrupted number of used entries (%u)�Could not close PID file '%s'. �Could not get values for %s. �Could not open PID file '%s': %s �Could not register PID file removal on SIGTERM. �Could not store my PID %jd. �Could not write daemon's PID into '%s'. �Creation of %s quota format is not supported. �Data dumped. �Denied access to host %s �Detected quota format %s �Device (%s) filesystem is mounted on unsupported device type. Skipping. �Disabling %s quota accounting on %s �Disabling %s quota enforcement %son %s �Disk quotas for %s %s (%cid %d): �Disk quotas for %s %s (%cid %u): %s �Do not know how to buffer format %d �Dumping gathered data for %ss. �Duplicated entries.�EXT2_IOC_GETFLAGS failed: %s �Enable XFS %s quota accounting during mount �Enabling %s quota enforcement on %s �Enabling %s quota on root filesystem (reboot to take effect) �Enforcing %s quota already on %s �Entry for id %u is truncated. �Error�Error checking device name: %s �Error parsing netlink message. �Error while editing grace times. �Error while editing quotas. �Error while getting old quota statistics from kernel: %s �Error while getting quota statistics from kernel: %s �Error while opening old quota file %s: %s �Error while releasing file on %s �Error while searching for old quota file %s: %s �Error while syncing quotas on %s: %s �Error with %s. �Exitting. �Failed to delete quota: %s �Failed to find tty of user %llu to report warning to. �Failed to open tty %s of user %llu to report warning. �Failed to parse grace times file. �Failed to read or parse quota netlink message: %s �Failed to remove IMMUTABLE flag from quota file %s: %s �Failed to write message to dbus: No enough memory. �Failed to write quota message for user %llu to %s: %s �File info done. �File limit reached on�Filesystem�Filesystem used soft hard grace used soft hard grace �Filesystem remounted RW. �Filesystem remounted read-only �First entry loaded. �Found an invalid UUID: %s �Found i_num %ld, blocks %ld �Found more structures for ID %u. Using values: BHARD: %lld BSOFT: %lld IHARD: %lld ISOFT: %lld �Found more structures for ID %u. Values: BHARD: %lld/%lld BSOFT: %lld/%lld IHARD: %lld/%lld ISOFT: %lld/%lld �Gid set allocation (%d): %s �Going to check %s quota file of %s �Grace period before enforcing soft limits for %ss: �Group�Headers checked. �Headers of file %s checked. Going to load data... �Hi, We noticed that the group %s you are member of violates the quotasystem used on this system. We have found the following violations: �Hi, We noticed that you are in violation with the quotasystem used on this system. We have found the following violations: �High uid detected. �ID %u has more structures. User intervention needed (use -i for interactive mode or -n for automatic answer). �Illegal free block reference to block %u�Illegal port number: %s �Illegal reference (%u >= %u) in %s quota file on %s. Quota file is probably corrupted. Please run quotacheck(8) and try again. �In block grace period on�In file grace period on�Incorrect format string for variable %s. Unrecognized expression %%%c. �Info�Inode: #%llu (%llu blocks, %u extents) �Inode: none �Inserting already present quota entry (block %u). �Invalid argument "%s" �Kernel quota version: %u.%u.%u �Kernel quota version: old �LDAP library version >= 2.3 detected. Please use LDAP_URI instead of hostname and port. Generated URI %s �Leaving %s �Line %d too long. �Loading first quota entry with grace times. �Maximum %u dquots (currently %u incore, %u on freelist) �Maybe create new quota files with quotacheck(8)? �Metadata init_io called when kernel does not support generic quota interface! �Metadata init_io called when kernel support is not enabled. �Mountpoint %s is not a directory?! �Mountpoint (or device) %s not found or has no quota enabled. �Mountpoint not specified. �Name must be quotaon or quotaoff not %s �Name of quota file too long. Contact %s. �No correct mountpoint specified. �No filesystem specified. �No filesystems with quota detected. �No possible destination for messages. Nothing to do. �Not all specified mountpoints are using quota. �Not enough memory to build PID file name. �Not enough memory. �Not found any corrupted blocks. Congratulations. �Not setting block grace time on %s because softlimit is not exceeded. �Not setting inode grace time on %s because softlimit is not exceeded. �Number of allocated dquots: %ld �Number of dquot cache hits: %ld �Number of dquot drops: %ld �Number of dquot lookups: %ld �Number of dquot reads: %ld �Number of dquot writes: %ld �Number of free dquots: %ld �Number of in use dquot entries (user/group): %ld �Number of quotafile syncs: %ld �OFF�ON�Old %s file name could not been determined. Usage will not be subtracted. �Old file found removed during check! �Old file not found. �Only RPC quota format is allowed on NFS filesystem. �Only XFS quota format is allowed on XFS filesystem. �Over block quota on�Over file quota on�Parse error at line %d. Cannot find administrators name. �Parse error at line %d. Cannot find end of group name. �Parse error at line %d. Trailing characters after administrators name. �Prototype name does not make sense when editing grace period or times. �Prototype user has no sense when editing grace times. �Quota enforcement already disabled for %s on %s �Quota file %s has IMMUTABLE flag set. Clearing. �Quota file %s has corrupted headers. You have to specify quota format on command line. �Quota file format version %d does not match the one specified on command line (%d). Quota file header may be corrupted. �Quota file not found or has wrong format. �Quota file on %s [%s] does not exist or has wrong format. �Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file. �Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file. Please turn quotas off or use -f to force checking. �Quota for id %u referenced but not present. �Quota format not supported in kernel. �Quota not supported by the filesystem. �Quota on %s is stored in system files and must be manipulated by fs tools. �Quota structure for %s owning quota file not present! Something is really wrong... �Quota structure has offset to other block (%u) than it should (%u). �Quota utilities version %s. �Quota write failed (id %u): %s �RPC quota format not compiled. �RPC quota format specified for non-NFS filesystem. �Reference to illegal block %u�Renaming new files to proper names. �Renaming new quotafile �Renaming old quotafile to %s~ �Repquota cannot report through RPC calls. �Required format %s not supported by kernel. �Scanning %s [%s] �Scanning stored directories from directory stack �Setting grace period on %s is not supported. �Setting grace times and other flags to default values. Assuming number of blocks is %u. �Should I continue?�Should I use new values?�Size of file: %lu Blocks: %u Free block: %u Block with free entry: %u Flags: %x �Skipping %s [%s] �Skipping line. �Something weird happened while scanning. Error %d �Space�Specified both -n and -t but only one of them can be used. �Specified path %s is not directory nor device. �Statistics: Total blocks: %u Data blocks: %u Entries: %u Used average: %f �Substracted %lu bytes. �Substracting space used by old %s quota file. �The running kernel does not support XFS �Time units may be: days, hours, minutes, or seconds �Times to enforce softlimit for %s %s (%cid %d): �Too many parameters to editor. �Trying to set quota limits out of range supported by quota format on %s. �Trying to set quota usage out of range supported by quota format on %s. �Trying to write info to readonly quotafile on %s �Trying to write info to readonly quotafile on %s. �Trying to write quota to readonly quotafile on %s �Unable to resolve name '%s' on line %d. �Undefined program name. �Unexpected XFS quota state sought on %s �Unknown action should be performed. �Unknown format of kernel netlink message! Maybe your quota tools are too old? �Unknown option '%c'. �Unknown quota format: %s Supported formats are: vfsold - original quota format vfsv0 - standard quota format vfsv1 - quota format with 64-bit limits rpc - use RPC calls xfs - XFS quota format �Usage: %s [options] Options are: -h --help shows this text -V --version shows version information -F --foreground starts the quota service in foreground -I --autofs do not ignore mountpoints mounted by automounter -p --port <port> listen on given port -s --no-setquota disables remote calls to setquota (default) -S --setquota enables remote calls to setquota -x --xtab <path> set an alternative file with NFSD export table �Usage: %s [options] Options are: -h --help shows this text -V --version shows version information -F --foreground starts the quota service in foreground -I --autofs do not ignore mountpoints mounted by automounter -p --port <port> listen on given port -x --xtab <path> set an alternative file with NFSD export table �Usage: %s [options] Options are: -h --help shows this text -V --version shows version information -C --no-console do not try to write messages to console -b --print-below write to console also information about getting below hard/soft limits -D --no-dbus do not try to write messages to DBUS -F --foreground run daemon in foreground �User�Utility for checking and repairing quota files. %s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a -u, --user check user files -g, --group check group files -c, --create-files create new quota files -b, --backup create backups of old quota files -f, --force force check even if quotas are enabled -i, --interactive interactive mode -n, --use-first-dquot use the first copy of duplicated structure -v, --verbose print more information -d, --debug print even more messages -m, --no-remount do not remount filesystem read-only -M, --try-remount try remounting filesystem read-only, continue even if it fails -R, --exclude-root exclude root when checking all filesystems -F, --format=formatname check quota files of specific format -a, --all check all filesystems -h, --help display this message and exit -V, --version display version information and exit �Utility for converting quota files. Usage: %s [options] mountpoint -u, --user convert user quota file -g, --group convert group quota file -e, --convert-endian convert quota file to correct endianity -f, --convert-format oldfmt,newfmt convert from old to VFSv0 quota format -h, --help show this help text and exit -V, --version output version information and exit �WARNING - Quotafile %s was probably truncated. Cannot save quota settings... �WARNING - %s: cannot change current block allocation �WARNING - %s: cannot change current inode allocation �WARNING - Quota file %s has corrupted headers �WARNING - Quota file %s was probably truncated. Cannot save quota settings... �WARNING - Quota file info was corrupted. �WARNING - Quotafile %s was probably truncated. Cannot save quota settings... �WARNING - Some data might be changed due to corruption. �Warning�Warning: Cannot open export table %s: %s Using '/' as a pseudofilesystem root. �Warning: Cannot set EXT2 flags on %s: %s �Warning: Ignoring -%c when filesystem list specified. �Warning: Mailer exitted abnormally. �Warning: No quota format detected in the kernel. �XFS Quota Manager dquot statistics �XFS quota allowed only on XFS filesystem. �You have to specify action to perform. �You have to specify source and target format of conversion. �Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. �Your quota file is stored in wrong endianity. Please use convertquota(8) to convert it. �and accounting �bad format: %s �block limit reached�block quota exceeded�block quota exceeded too long�blocks�cannot find %s on %s [%s] �cannot write times for %s. Maybe kernel does not support such operation? �copy_group_quota_limits: Failed to get groupquota for gid %ld : %s �copy_group_quota_limits: Failed to set groupquota for gid %ld : %s �copy_user_quota_limits: Failed to get userquota for uid %ld : %s �copy_user_quota_limits: Failed to set userquota for uid %ld : %s �day�days�done �error (%d) while allocating file inode bitmap �error (%d) while opening %s �error (%d) while opening inode scan �error (%d) while starting inode scan �error while getting quota from %s for %s (id %u): %s �errstr (%d) while allocating directory inode bitmap �file limit reached�file quota exceeded�file quota exceeded too long�files�find_free_dqentry(): Data block full but it shouldn't. �fsname mismatch �getgroups(): %s �got below block limit�got below block quota�got below file limit�got below file quota�grace�group�group %s does not exist. �host %s attempted to call setquota from port >= 1024 �host %s attempted to call setquota when disabled �hour�hours�limit�lstat: Cannot stat `%s/%s': %s Guess you'd better run fsck first ! exiting... �minute�minutes�none�off�on�popd %s Entering directory %s �pushd %s/%s �quota�quotactl on %s [%s]: %s �quotactl on %s: %s �quotactl() on %s: %s �second�seconds�set root_squash on %s: %s �space�svc_run returned �turn quotas off for all filesystems�turn quotas on for all filesystems�unable to free arguments �undefined�unknown quota warning�unset�user�user %s does not exist. �using %s on %s [%s]: %s �Project-Id-Version: quota 4.01 Report-Msgid-Bugs-To: jack@suse.cz PO-Revision-Date: 2014-07-23 22:00+0200 Last-Translator: Jakub Bogusz <qboosh@pld-linux.org> Language-Team: Polish <translation-team-pl@lists.sourceforge.net> Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit � Dodawanie %s, o rozmiarze %lld, i-węzeł %d, dowiązań %d uid %u gid %u � quota [-qvswim] [-l | [-Q | -A]] [-F format] -g grupa ... � quota [-qvswim] [-l | [-Q | -A]] [-F format] -u użytkownik ... � Limity bloków Limity plików � Prosimy posprzątać dane grupy przed upłynięciem okresu pobłażliwości. Oznacza to, iż system uważa, że na podanych systemach plików grupa używa więcej miejsca, niż jest upoważniona. Jeśli nie posprzątacie tak, aby znaleźć się poniżej limitów przed upłynięciem okresu pobłażliwości, system zabroni Ci i innym członkom grupy tworzyć nowe pliki należące do tej grupy. Aby uzyskać dodatkowe wyjaśnienia prosimy skontaktować się z nami pod adresem %s lub telefonicznie pod numerem %s. � Mamy nadzieję, że posprzątasz przed upłynięciem okresu pobłażliwości. Oznacza to, iż system uważa, że na podanych systemach plików używasz więcej miejsca, niż jesteś upoważniony. Jeżeli nie posprzątasz tak, aby znaleźć się poniżej limitów przed upłynięciem okresu pobłażliwości, system zabroni Ci tworzyć nowe pliki. Aby uzyskać dodatkowe wyjaśnienia prosimy skontaktować się z nami pod adresem %s lub telefonicznie pod numerem %s. � Limity %-7s Limity plików � System plików Pobłażliwość dla bloków Pobłażliwość dla i-węzłów � System plików bloki miękki twardy i-węzły miękki twardy � System plików Pobłażliwość dla bloków Pobłażliwość dla i-węzłów � trafienia bufora: %u � chybienia bufora: %u � duplikaty dquot: %u � żądania dquot: %u � poprawki inact: %u � chybione poprawki: %u � poprawki: %u � poprawki shake: %u �%-9s używ. mięk. twar. pobł. używ. mięk. twar. pobł. �%02d:%02d�%d dni�%s (gid %d): Brak uprawnień �%s (gid %d): błąd podczas próby wykonania getgroups(): %s �%s (gid %d): przydzielenie zbioru gid (%d): %s �%s (uid %d): Brak uprawnień �%s [%s]: limity %s wyłączone �%s [%s]: limity %s włączone �Limity %s na %s (%s) są %s �Synchronizacja limitów %s dla %s nie powiodła się: %s �Synchronizacja limitów %s nie powiodła się: %s �%s: %s �%s: limity %s wyłączone �%s: limity %s włączone �%s: wyłączono %s root_squash �%s: włączono %s root_squash �%s: nie można włączyć limitów na systemie plików NFS �%s: usunięto bloki limitów %s �%u dni�%u godzin�%u minut�%u sekund�*** Raport dla limitów %s na urządzeniu %s �*** Raport dla limitów %s na urządzeniu %s �-F, --format=format zmiana limitów w podanym formacie -p, --prototype=nazwa skopiowanie danych od wzorcowego użytkownika/grupy --always-resolve próba rozwiązania nazwy zawsze, nawet jeśli składa się wyłącznie z cyfr -f, --filesystem=system-plików zmiana danych tylko na podanym systemie plików -t, --edit-period zmiana okresu pobłażliwości -T, --edit-times zmiana czasu pobłażliwości użytkownika/grupy -h, --help wyświetlenie tego opisu i zakończenie -V, --version wyświetlenie informacji o wersji i zakończenie �-r, --remote zmiana zdalnego limitu (poprzez RPC) -m, --no-mixed-pathnames usunięcie początkowych / z punktów mont. NFSv4 �-r, --remote zmiana zdalnego limitu (poprzez RPC) -m, --no-mixed-pathnames usunięcie początkowych / z punktów montowania NFSv4 �0 sekund�Podliczanie [na dysku]: %s; Wymuszanie [na dysku]: %s �Podliczanie: %s; Wymuszanie: %s �Dodawanie struktury dquot typu %s dla %d �Dodawanie dowiązania dla i-węzła %llu �Nie znaleziono administratora dla grupy %s. Anulowanie poczty. �Przydzielono %d bajtów pamięci Zwolniono %d bajtów Stracono %d bajtów �Podliczanie limitów %s było już włączone na %s �Wedle życzenia... anulowanie sprawdzania tego pliku. �Błędny okres pobłażliwości dla bloków�Błędny twardy limit bloków�Błędny miękki limit bloków�Błędny znak magiczny lub wersja pliku (raczej nie plik limitów dla innego procesora). �Zły format: %s �Błędny okres pobłażliwości dla i-węzłów�Błędny twardy limit i-węzłów�Błędny miękki limit i-węzłów�Błędna liczba argumentów. �Złe jednostki czasu. Jednostkami są 'second', 'minute', 'hour' i 'day'. �Tryb wsadowy i użytkownik wzorcowy nie mogą być użyte razem. �Nie można użyć trybu wsadowego do ustawienia okresów pobłażliwości. �bloków�Dwukrotne odniesienie w drzewie do bloku %u�Blok %u jest ucięty. �Blok %u: �Okres pobłażliwości dla bloków: %s; Okres pobłażliwości dla i-węzłów: %s �Twardy limit bloków osiągnięty na�Błędy na adres %s �Błędy na adres: %s �Brak dostępu do podanego pliku xtab %s: %s �Nie można przydzielić nowego bloku limitów (brak miejsca na dysku). �Nie można zmienić okresów pobłażliwości przy użyciu protokołu RPC. �Nie można zmienić właściciela pliku tymczasowego: %s �Nie można zmienić uprawnień %s: %s �Nie można zmienić stanu limitów GFS2. �Nie można zmienić stanu limitów XFS. Nie są wkompilowane w jądro. �Nie można utrwalić dquot dla id %u: %s �Nie można połączyć się z gniazdem netlink: %s �Nie można połączyć się z systemowym DBUS-em: %s �Nie można utworzyć komunikatu DBUS: za mało pamięci. �Nie można utworzyć pliku limitów %s dla nowego formatu na %s: %s �Nie można utworzyć nowego pliku limitów %s: %s �Nie można utworzyć potoku: %s �Nie można utworzyć zbioru dla sigaction(): %s �Nie można utworzyć pliku tymczasowego: %s �Nie można usunąć limitów %s na %s - najpierw trzeba wyłączyć podliczanie �Nie można usunąć limitów %s na %s - najpierw należy wyłączyć wymuszanie i podliczanie �Nie można wykryć formatu limitów dla limitów z kroniką na %s �Nie można powielić deskryptora: %s �Nie można uruchomić %s �Nie można uruchomić '%s': %s �Nie można znaleźć urządzenia z %s. Pomijanie... �Nie można znaleźć punktu montowania systemu plików dla katalogu %s �Nie znaleziono żadnego pliku limitów do operowania na nim. �Nie można znaleźć sprawdzonego pliku limitów %s na %s! �Nie znaleziono systemu plików do sprawdzenia lub nie jest zamontowany z obsługą limitów. �Nie można znaleźć punktu montowania dla urządzenia %s �Nie można znaleźć pliku limitów na %s [%s], aby włączyć/wyłączyć limity. �Nie można znaleźć opcji limitów dla systemu plików %s z limitami! �Nie można zakończyć we/wy na nowym pliku limitów: %s �Nie można wykonać fork: %s �Nie można zgromadzić danych o limitach. Korzeń drzewa uszkodzony. �Nie można uzyskać nazwy urządzenia dla %s �Nie można dokładnie uzyskać użytej przestrzeni... wyniki mogą być niedokładne. �Nie można uzyskać nazwy hosta: %s �Nie można uzyskać od jądra informacji o pliku limitów %s na %s: %s �Nie można uzyskać nazwy dla uid/gid %u. �Nie można uzyskać nazwy nowego pliku limitów. �Nie można uzyskać nazwy starego pliku limitów na %s. �Nie można uzyskać od jądra limitu %s dla id %d na %s: %s �Nie można uzyskać informacji o limitach dla użytkownika %s �Nie można uzyskać informacji o limitach dla użytkownika %s. �Nie można uzyskać nazwy pliku limitów dla %s �Nie można uzyskać informacji systemowych: %s �Nie można odgadnąć formatu z nazwy pliku na %s. Proszę podać format w poleceniu. �Nie można zainicjować we/wy na nowym pliku limitów: %s �Nie można zainicjować we/wy na pliku limitów xfs/gfs2: %s �Nie można zainicjować skanu punktów montowania. �Nie można zainicjować limitów na %s: %s �Nie można dołączyć do grupy multicastowej limitów: %s �nie można otworzyć %s: %s �Nie można otworzyć %s: %s Będą używane nazwy urządzeń. �Nie można otworzyć żadnego pliku z punktami montowania. �Nie można otworzyć pliku %s: %s �Nie można otworzyć pliku z administratorami grup: %s �Nie można otworzyć nowego pliku limitów %s: %s �Nie można otworzyć pliku limitów %s w starym formacie na %s �Nie można otworzyć starego pliku limitów na %s: %s �Nie można otworzyć potoku: %s �Nie można otworzyć pliku limitów %s: %s �Nie można przetworzyć linii wejścia %d. �Nie można przeanalizować linii %d w pliku quotatab (brakuje ':') �Nie można przetworzyć czasu przy zmiennej CC_BEFORE (linia %d). �Nie można odczytać bloku %u: %s �Nie można odczytać wpisu dla id %u z pliku limitów %s: %s �Nie można odczytać pierwszego wpisu z pliku limitów %s: %s �Nie można odczytać nagłówka z pliku limitów %s: %s �Nie można odczytać nagłówka starego pliku limitów. �Nie można odczytać z pliku pojedynczych okresów pobłażliwości. �Nie można odczytać informacji z pliku limitów %s: %s �Nie można odczytać informacji o starym pliku limitów. �Nie można odczytać struktury limitów dla id %u: %s �Nie można odczytać limitów z pliku. �Nie można odczytać pliku statystyk %s: %s �Nie można zarejestrować wywołania zwrotnego dla komunikatów netlink: %s �Nie można przemontować r/w systemu plików %s. Nie można zapisać nowych plików. �Nie można przemontować r/o systemu plików zamontowanego pod %s, więc policzone wartości mogą być błędne. Proszę zatrzymać wszystkie programy piszące na ten system plików lub użyć flagi -m, aby wymusić sprawdzanie. �Nie można przemontować r/o systemu plików zamontowanego pod %s. Policzone wartości mogą być błędne. �Nie można zmienić nazwy nowego pliku limitów %s na %s: %s �Nie można zmienić nazwy starego pliku limitów %s na %s: %s �Nie można przywrócić obsługi sygnału: %s �Nie można rozwiązać ścieżki punktu montowania %s: %s �Nie można rozwiązać ścieżki %s: %s �Nie można rozwiązać nazwy netlink limitów: %s �Nie można ustawić jednocześnie jednostkowych i globalnych okresów pobłażliwości. �Nie można ustawić okresów pobłażliwości przy użyciu protokołu RPC. �Nie można ustawić w jądrze informacji o pliku limitów %s na %s: %s �Nie można ustawić w jądrze limitu %s dla id %d na %s: %s �Nie można ustawić obsługi sygnału: %s �Nie można ustawić opcji gniazda: %s �Nie można wykonać stat na urządzeniu %s (może błąd w quotatab) �Nie można wykonać stat na katalogu %s: %s �Nie można wykonać stat na punkcie montowania %s: %s �Nie można wykonać stat starego pliku limitów %s %s: %s. Miejsce nie będzie odjęte. �Nie można wykonać stat na pliku limitów %s: %s �Nie można wykonać stat() na punkcie montowania z %s: %s Pomijanie... �Nie można wykonać stat() na podanym punkcie montowania %s: %s Pomijanie... �Nie można wykonać stat() na zamontowanym urządzeniu %s: %s �Nie można wykonać stat() na punkcie montowania %s: %s �Nie można wykonać statfs() %s: %s �Nie można wyłączyć podliczania limitów %s na %s kiedy wymuszanie jest włączone �Nie można zsynchronizować limitów na urządzeniu %s: %s �Nie można wyłączyć limitów %s na %s: %s Jądro nie zauważy zmian wykonanych przez checkquota. �Nie można włączyć limitów %s na %s: %s Jądro nie zauważy zmian wykonanych przez checkquota. �Nie można włączyć/wyłączyć limitów przez RPC. �Nie można czekać na wysłanie poczty: %s �Nie można zapisać bloku (%u): %s �Nie można zapisać okresów pobłażliwości do pliku. �Nie można zapisać do pliku pojedynczych okresów pobłażliwości. �Nie można zapisać limitów (id %u): %s �Nie można zapisać limitów dla %u na %s: %s �Nie można zapisać limitów do pliku. �Sprawdzono %d katalogów i %d plików �Sprawdzanie nagłówków pliku limitów... �Sprawdzanie informacji w pliku limitów... �Skompilowano z:%s �Kontynuować sprawdzanie przy założeniu wersji podanej z linii poleceń?�Bloki uszkodzone: �Uszkodzona liczba użytych wpisów (%u)�Nie udało się zamknąć pliku PID-u '%s'. �Nie można uzyskać wartości dla %s. �Nie udało się otworzyć pliku PID '%s': %s �Nie udało się zarejestrować usuwania pliku PID-u pod SIGTERM. �Nie udało się zapisać własnego PID-u %jd. �Nie udało się zapisać PID-u demona do '%s'. �Tworzenie limitów w formacie %s nie jest obsługiwane. �Dane zrzucone. �Odrzucono próbę dostępu z hosta %s �Wykryto format limitów %s �Urządzenie (%s), na którym jest zamontowany system plików, nie jest obsługiwanego typu. Pominięto. �Wyłączanie podliczania limitów %s na %s �Wyłączanie wymuszania %2$slimitów %1$s na %3$s �Limity dyskowe %s %s (%cid %d): �Ograniczenia dyskowe %s %s (%cid %u): %s �Nie wiem jak buforować format %d �Zrzucanie zgromadzonych danych typu %s. �Powtórzone wpisy.�ioctl XFS_IOC_GETFLAGS nie powiódł się: %s �Należy włączyć podliczanie limitów %s na XFS podczas montowania �Włączanie wymuszania limitów %s na %s �Włączanie limitów %s na / (zostaną uwzględnione po reboocie) �Wymuszanie limitów %s było już włączone na %s �Wpis dla id %u jest ucięty. �Błąd�Błąd podczas sprawdzania nazwy urządzenia: %s �Błąd analizy komunikatu netlink. �Błąd podczas edycji okresów pobłażliwości. �Błąd podczas edycji limitów. �Błąd podczas pobierania od jądra starych statystyk limitów: %s �Błąd podczas pobierania od jądra statystyk limitów: %s �Błąd podczas otwierania starego pliku limitów %s: %s �Błąd podczas zwalniania pliku na %s �Błąd podczas poszukiwania starego pliku limitów %s: %s �Błąd podczas synchronizacji limitów na %s: %s �Błąd przy %s. �Zakończenie. �Nie udało się usunąć limitów: %s �Nie udało się odnaleźć tty użytkownika %llu w celu zgłoszenia ostrzeżenia. �Nie udało się otworzyć tty %s użytkownika %llu w celu zgłoszenia ostrzeżenia. �Analiza pliku okresów pobłażliwości nie powiodła się. �Nie udało się odczytać lub przeanalizować komunikatu netlink: %s �Nie udało się usunąć flagi niezmienności (IMMUTABLE) z pliku limitów %s: %s �Nie udało się wypisać komunikatu przez dbus: za mało pamięci. �Nie udało się wypisać komunikatu o limicie dla użytkownika %llu na %s: %s �Informacje z pliku wczytane. �Twardy limit plików osiągnięty na�System plików�System plików używ. mięk. twar. pobł. używ. mięk. twar. pobł. �Przemontowano system plików do zapisu i odczytu. �System plików przemontowany tylko do odczytu �Wczytano pierwszy wpis. �Znaleziono nieprawidłowy UUID: %s �Znaleziono i_num %ld, %ld bloków �Znaleziono więcej struktur dla ID %u. Użycie wartości: BHARD: %lld BSOFT %lld IHARD: %lld ISOFT: %lld �Znaleziono więcej struktur dla ID %u. Wartości: BHARD %lld/%lld BSOFT: %lld/%lld IHARD: %lld/%lld ISOFT: %lld/%lld �Przydzielenie zbioru gid (%d): %s �Rozpoczynanie sprawdzania pliku limitów %s na %s �Okres pobłażliwości przed wymuszeniem miękkich limitów %s: �Grupa�Nagłówki sprawdzone. �Nagłówki pliku %s sprawdzone. Rozpoczęcie wczytywania danych... �Cześć! Zauważyliśmy, że grupa %s, której jesteś członkiem, narusza zasady systemu limitowania przestrzeni dyskowej, używanego na tym systemie. Znaleźliśmy następujące naruszenia: �Cześć! Zauważyliśmy naruszenie zasad systemu limitowania przestrzeni dyskowej, używanego na tym systemie. Znaleźliśmy następujące naruszenia: �Wykryto duży uid. �ID %u ma więcej struktur. Potrzebna inwencja użytkownika (-i dla trybu interaktywnego lub -n dla automatycznej odpowiedzi). �Błędne odniesienie pustego bloku do bloku %u�Błędny numer portu: %s �Niedozwolone odniesienie (%u >= %u) w pliku limitów %s na %s. Plik limitów jest prawdopodobnie uszkodzony. Proszę uruchomić quotacheck(8) i spróbować ponownie. �Okres pobłażliwości dla bloków na�Okres pobłażliwości dla plików na�Niepoprawny łańcuch formatujący dla zmiennej %s. Nierozpoznane wyrażenie %%%c. �Informacja�I-węzeł: #%llu (%llu bloków, %u ekstentów) �I-węzeł: żaden �Wstawianie już obecnego wpisu limitów (blok %u). �Błędny argument "%s" �Wersja limitów w jądrze: %u.%u.%u �Wersja limitów w jądrze: stara �Wykryto bibliotekę LDAP w wersji >= 2.3. Proszę użyć LDAP_URI zamiast nazwy hosta i portu. Wygenerowano URI %s �Opuszczanie %s �Linia %d zbyt długa. �Wczytywanie pierwszego wpisu limitów z okresami pobłażliwości. �Maksimum %u dquot (aktualnie %u w rdzeniu, %u na liście wolnych) �Może utworzyć nowe pliki limitów przez quotacheck(8)? �init_io metadanych wywołano bez obsługi ogólnego interfejsu limitów w jądrze! �init_io metadanych wywołano bez włączonej obsługi w jądrze. �Punkt montowania %s nie jest katalogiem?! �Nie znaleziono punktu montowania (lub urządzenia) %s, albo nie ma on włączonych limitów. �Nie podano punktu montowania. �Nazwą musi być quotaon, lub quotaoff, nie %s �Nazwa pliku limitów zbyt długa. Proszę o kontakt z %s. �Nie podano poprawnego punktu montowania. �Nie podano systemu plików. �Nie wykryto systemów plików z limitami. �Brak celu dla komunikatów. Nie ma nic do roboty. �Nie wszystkie podane punkty montowania używają limitów. �Za mało pamięci, aby zbudować nazwę pliku PID. �Za mało pamięci. �Nie znaleziono żadnych uszkodzonych bloków. Gratulacje. �Bez ustawiania czasu pobłażliwości dla bloków na %s - nie przekroczono limitu miękkiego. �Bez ustawiania czasu pobłażliwości dla i-węzłów na %s - nie przekroczono limitu miękkiego. �Liczba przydzielonych struktur dquot: %ld �Liczba trafień bufora dquot: %ld �Liczba zrzutów dquot: %ld �Liczba poszukiwań dquot: %ld �Liczba odczytów dquot: %ld �Liczba zapisów dquot: %ld �Liczba wolnych dquot: %ld �Liczba używanych wpisów dquot (użytkownik/grupa): %ld �Liczba synchronizacji pliku limitów: %ld �WYŁĄCZONE�WŁĄCZONE�Nie udało się określić nazwy starego pliku %s. Miejsce nie będzie odjęte. �Stary plik został usunięty przy sprawdzaniu! �Nie znaleziono starego pliku. �Na systemie plików NFS dozwolony jest tylko format limitów RPC. �Na systemie plików XFS dozwolony jest tylko format limitów XFS. �Miękki limit dla bloków przekroczony na�Miękki limit dla plików przekroczony na�Błąd podczas analizy linii %d. Nie można znaleźć nazwy administratora. �Błąd podczas analizy linii %d. Nie można znaleźć nazwy grupy. �Błąd podczas analizy linii %d. Nadmiarowe znaki po nazwie administratora. �Wzorcowy użytkownik nie ma sensu przy edycji okresów pobłażliwości. �Wzorcowy użytkownik nie ma sensu przy edycji okresów pobłażliwości. �Wymuszenie limitów %s było już wyłączone na %s �Plik limitów %s ma ustawioną flagę niezmienności (IMMUTABLE). Czyszczenie. �Plik limitów %s ma uszkodzone nagłówki. Trzeba określić format limitów z linii poleceń. �Wersja formatu pliku limitów %d nie zgadza się z wersją podaną z linii poleceń (%d). Plik limitów może być uszkodzony. �Pliku limitów nie znaleziono lub ma zły format. �Plik limitów na %s [%s] nie istnieje lub ma niewłaściwy format. �Limity %s włączone w punkcie montowania %s - quotacheck może uszkodzić plik. �Limity %s włączone w punkcie montowania %s - quotacheck może uszkodzić plik. Proszę wyłączyć limity lub użyć -f, aby wymusić sprawdzanie. �Limit dla id %u nie istnieje, ale jest odniesienie do niego. �Format limitów nie obsługiwany przez jądro. �Limity nie są obsługiwane przez ten system plików. �Limity na %s są zapisane w plikach systemowych i muszą być modyfikowane narzędziami dla systemu plików. �Brak struktury limitów %s dla właściciela pliku limitów! Coś jest naprawdę źle... �Struktura limitów ma wskazanie na inny blok (%u) niż powinna (%u). �Narzędzia Quota w wersji %s. �Zapis limitów nie powiódł się (id %u): %s �Format limitów RPC nie wkompilowany. �Podano format limitów RPC dla systemu plików innego niż NFS. �Odniesienie do nieprawidłowego bloku %u�Zmiana nazw nowych plików na właściwe. �Zmiana nazwy nowego pliku limitów �Zmiana nazwy starego pliku limitów na %s~ �repquota nie może raportować poprzez wywołania RPC. �Wymagany format %s nie obsługiwany przez jądro. �Skanowanie %s [%s] �Skanowanie zapisanych na stosie katalogów �Ustawianie okresu pobłażliwości na %s nie jest obsługiwane. �Ustawianie okresów pobłażliwości i innych flag na wartości domyślne. Przyjęcie liczby bloków %u. �Czy kontynuować?�Czy użyć nowych wartości?�Rozmiar pliku: %lu Bloki: %u Wolny blok: %u Blok z wolnym wpisem: %u Flagi: %x �Pomijanie %s [%s] �Pomijanie linii. �Podczas skanowania zdarzyło się coś dziwnego. Błąd %d �miejsca�Podano jednocześnie -n i -t, ale tylko jedna z nich może być użyte. �Podana ścieżka %s nie jest katalogiem ani urządzeniem. �Statystyki: Bloków w sumie: %u Bloków danych: %u Wpisów: %u Użyte średnio: %f �Odjęto %lu bajtów. �Odejmowanie miejsca użytego przez stary plik limitów %s. �Działające jądro nie obsługuje XFS �Jednostkami czasu mogą być: days, hours, minutes, seconds �Okresy wymuszenia miękkich limitów %s %s (%cid %d): �Zbyt dużo parametrów dla edytora. �Próba ustawienia limitów spoza zakresu obsługiwanego przez format limitów na %s. �Próba ustawienia wykorzystania limitów spoza zakresu obsługiwanego przez format limitów na %s. �Próba zapisu informacji do pliku limitów tylko do odczytu na %s �Próba zapisu informacji do pliku limitów tylko do odczytu na %s. �Próba zapisu limitów do pliku limitów tylko do odczytu na %s �Nie można rozwiązać nazwy '%s' w linii %d. �Niezdefiniowana nazwa programu. �Zauważono nieoczekiwany stan limitów XFS na %s �Miała być wykonana nieznana akcja. �Nieznany format komunikatu netlink jądra! Może narzędzia quota są za stare? �Nieznana opcja '%c'. �Nieznany format limitów: %s Obsługiwane formaty to: vfsold - oryginalny format limitów vfsv0 - standardowy format limitów vfsv1 - format limitów z limitami 64-bitowymi rpc - używanie wywołań RPC xfs - format limitów na XFS �Składnia: %s [opcje] Opcje to: -h --help wyświetlenie tego opisu -V --version wyświetlenie informacji o wersji -F --foreground uruchomienie usługi quota jako procesu pierwszoplanowego -I --autofs nieignorowanie punktów obsługiwanych przez automounter -p --port <port> nasłuchiwanie na podanym porcie -s --no-setquota wyłączenie zdalnych wywołań setquota (domyślne) -S --setquota włączenie zdalnych wywołań setquota -x --xtab <ścieżka> ustawienie alternatywnego pliku z tabelą export NFSD �Składnia: %s [opcje] Opcje to: -h --help wyświetlenie tego opisu -V --version wyświetlenie informacji o wersji -F --foreground uruchomienie usługi quota jako procesu pierwszoplanowego -I --autofs nieignorowanie punktów obsługiwanych przez automounter -p --port <port> nasłuchiwanie na podanym porcie -x --xtab <ścieżka> ustawienie alternatywnego pliku z tabelą export NFSD �Składnia: %s [opcje] Opcje to: -h --help wyświetlenie tego opisu -V --version wyświetlenie informacji o wersji -C --no-console bez wypisywania komunikatów na konsoli -b --print-below wypisywanie na konsoli także informacji o zejściu poniżej limitów (twardych i miękkich) -D --no-dbus bez wypisywania komunikatów przez DBUS -F --foreground uruchomienie demona jako procesu pierwszoplanowego �Użytkownik�Narzędzie do sprawdzania i naprawy plików limitów. %s [-gucbfinvdmMR] [-F <format-limitów>] system-plików|-a -u, --user sprawdzenie plików użytkowników (user) -g, --group sprawdzenie plików grup (group) -c, --create-files utworzenie nowych plików limitów -b, --backup utworzenie kopii zapasowych starych plików limitów -f, --force wymuszenie sprawdzenia nawet jeśli limity są włączone -i, --interactive tryb interaktywny -n, --use-first-dquot użycie pierwszej kopii powielonej struktury -v, --verbose wypisywanie większej ilości informacji -d, --debug wypisywanie jeszcze większej liczby komunikatów -m, --no-remount bez przemontowywania systemu plików tylko do odczytu -M, --try-remount próba przemontowania systemu plików tylko do odczytu, kontynuacja nawet jeśli się to nie powiedzie -R, --exclude-root wykluczenie głównego systemu plików przy sprawdzaniu wszystkich systemów plików -F, --format=format sprawdzenie plików limitów w podanym formacie -a, --all sprawdzenie wszystkich systemów plików -h, --help wyświetlenie tego opisu i zakończenie -V, --version wyświetlenie informacji o wersji i zakończenie �Narzędzie do konwersji plików limitów. Składnia: %s [opcje] punkt-montowania -u, --user konwersja pliku limitów użytkowników (user) -g, --group konwersja pliku limitów grup (group) -e, --convert-endian konwersja pliku limitów do poprawnej kolejności bajtów -f, --convert-format stary,nowy konwersja ze starego formatu limitów na VFSv0 -h, --help wyświetlenie tego opisu i zakończenie -V, --version wyświetlenie informacji o wersji i zakończenie �UWAGA - plik limitów %s zapewne był ucięty. Nie można zapisać ustawień... �UWAGA - %s: nie można zmienić aktualnego przydziału bloków �UWAGA - %s: nie można zmienić aktualnego przydziału i-węzłów �UWAGA - plik limitów %s ma uszkodzone nagłówki �UWAGA - plik limitów %s zapewne był ucięty. Nie można zapisać ustawień... �UWAGA - informacje w pliku limitów były uszkodzone. �UWAGA - plik limitów %s zapewne był ucięty. Nie można zapisać ustawień... �UWAGA - część danych może być zmieniona z powodu uszkodzenia. �Uwaga�Uwaga: Nie można otworzyć tabeli export %s: %s Użycie '/' jako głównego katalogu pseudo systemu plików. �Uwaga: Nie można ustawić flag EXT2 na %s: %s �Uwaga: Zignorowano -%c kiedy została podana lista systemów plików. �Uwaga: Program wysyłający pocztę nie zakończył się normalnie. �Uwaga: Nie wykryto formatu limitów w jądrze. �Statystyki dquot Zarządcy Limitów na XFS �Format limitów XFS dozwolony tylko na systemie plików XFS. �Trzeba podać akcję, jaka ma zostać wykonana. �Trzeba podać źródłowy i docelowy format do konwersji. �Jądro prawdopodobnie obsługuje limity z kroniką, ale nie są one używane. Proszę rozważyć przejście na limity z kroniką, aby zapobiec uruchamianiu quotacheck po każdym nienormalnym zamknięciu systemu. �Plik limitów jest zapisany dla innego procesora. Do konwersji służy convertquota(8). �i podliczania �zły format: %s �osiągnięto twardy limit bloków�przekroczono miękki limit bloków�miękki limit bloków przekroczony zbyt długo�bloki�nie można znaleźć %s na %s [%s] �nie można zapisać czasów %s. Może jądro nie obsługuje takiej operacji? �copy_group_quota_limits: nie udało się odczytać limitów grupy dla gid %ld : %s �copy_group_quota_limits: nie udało się ustawić limitów grupy dla gid %ld : %s �copy_user_quota_limits: nie udało się pobrać limitów użytkownika dla uid %ld : %s �copy_user_quota_limits: nie udało się ustawić limitów użytkownika dla uid %ld : %s �dzień�dni�zrobiono �błąd (%d) podczas przydzielania bitmapy i-węzłów plików �błąd (%d) podczas otwierania %s �błąd (%d) podczas otwierania skanu i-węzłów �błąd (%d) podczas uruchamiania skanu i-węzłów �błąd podczas uzyskiwania limitów z %s dla %s (id %u): %s �errstr (%d) podczas przydzielania bitmapy i-węzłów katalogów �osiągnięto twardy limit plików�przekroczono miękki limit plików�miękki limit plików przekroczony zbyt długo�pliki�find_free_dqentry(): Blok danych jest pełny, a nie powinien. �Nazwa systemu plików się nie zgadza �getgroups(): %s �zejście poniżej twardego limitu bloków�zejście poniżej miękkiego limitu bloków�zejście poniżej twardego limitu plików�zejście poniżej miękkiego limitu plików�pobł.�grupy�grupa %s nie istnieje. �host %s próbował wywołać setquota z portu >= 1024 �host %s próbował wywołać setquota kiedy ta operacja jest wyłączona �godzina�godzin�twardy�lstat: Nie można wykonać stat na `%s/%s': %s Lepiej najpierw uruchomić fsck! zakończenie... �minuta�minut�brak�wyłączone�włączone�popd %s Wejście do katalogu %s �pushd %s/%s �miękki�quotactl na %s [%s]: %s �quotactl na %s: %s �quotactl() na %s: %s �sekunda�sekund�ustawianie root_squash na %s: %s �miejsce�svc_run powróciło �wyłączenie limitów na wszystkich systemach plików�włączenie limitów na wszystkich systemach plików�nie można usunąć argumentów �nieznany�nieznane ostrzeżenie dotyczące limitów�nie ustawiona�użytkownika�użytkownik %s nie istnieje. �użycie %s na %s [%s]: %s �������������������������������������������������������������������������������������������������������������������������quota-4.09/po/pl.po���������������������������������������������������������������������������������0000664�0000000�0000000�00000315072�14463210551�0014201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Polish translation for quota. # Copyright (C) 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # PAUL NIEWIADOMSKI <lilo@free.poltronic.net>, 2000. # Jakub Bogusz <qboosh@pld-linux.org>, 2003-2014. # msgid "" msgstr "" "Project-Id-Version: quota 4.01\n" "Report-Msgid-Bugs-To: jack@suse.cz\n" "POT-Creation-Date: 2022-09-16 13:08+0200\n" "PO-Revision-Date: 2014-07-23 22:00+0200\n" "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: bylabel.c:274 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "Znaleziono nieprawidłowy UUID: %s\n" #: bylabel.c:294 #, c-format msgid "Error checking device name: %s\n" msgstr "Błąd podczas sprawdzania nazwy urządzenia: %s\n" #: convertquota.c:41 #, c-format msgid "" "Utility for converting quota files.\n" "Usage:\n" "\t%s [options] mountpoint\n" "\n" "-u, --user convert user quota file\n" "-g, --group convert group quota file\n" "-e, --convert-endian convert quota file to correct endianity\n" "-f, --convert-format oldfmt,newfmt convert from old to VFSv0 quota format\n" "-h, --help show this help text and exit\n" "-V, --version output version information and exit\n" "\n" msgstr "" "Narzędzie do konwersji plików limitów.\n" "Składnia:\n" "\t%s [opcje] punkt-montowania\n" "\n" "-u, --user konwersja pliku limitów użytkowników " "(user)\n" "-g, --group konwersja pliku limitów grup (group)\n" "-e, --convert-endian konwersja pliku limitów do poprawnej\n" " kolejności bajtów\n" "-f, --convert-format stary,nowy konwersja ze starego formatu limitów na " "VFSv0\n" "-h, --help wyświetlenie tego opisu i zakończenie\n" "-V, --version wyświetlenie informacji o wersji i " "zakończenie\n" "\n" #: convertquota.c:48 warnquota.c:1117 quotacheck.c:314 repquota.c:73 #: common.c:131 #, c-format msgid "Bugs to %s\n" msgstr "Błędy na adres %s\n" #: convertquota.c:97 msgid "You have to specify source and target format of conversion.\n" msgstr "Trzeba podać źródłowy i docelowy format do konwersji.\n" #: convertquota.c:112 quotacheck.c:400 quotasync.c:88 repquota.c:163 #: quotaon.c:113 setquota.c:264 msgid "Bad number of arguments.\n" msgstr "Błędna liczba argumentów.\n" #: convertquota.c:119 msgid "You have to specify action to perform.\n" msgstr "Trzeba podać akcję, jaka ma zostać wykonana.\n" #: convertquota.c:166 quotacheck_v2.c:241 quotaio_tree.c:58 #, c-format msgid "Cannot read block %u: %s\n" msgstr "Nie można odczytać bloku %u: %s\n" #: convertquota.c:191 convertquota.c:283 #, c-format msgid "Cannot commit dquot for id %u: %s\n" msgstr "Nie można utrwalić dquot dla id %u: %s\n" #: convertquota.c:239 msgid "Cannot read header of old quotafile.\n" msgstr "Nie można odczytać nagłówka starego pliku limitów.\n" #: convertquota.c:243 msgid "" "Bad file magic or version (probably not quotafile with bad endianity).\n" msgstr "" "Błędny znak magiczny lub wersja pliku (raczej nie plik limitów dla innego " "procesora).\n" #: convertquota.c:254 msgid "Cannot read information about old quotafile.\n" msgstr "Nie można odczytać informacji o starym pliku limitów.\n" #: convertquota.c:296 msgid "Cannot get name of new quotafile.\n" msgstr "Nie można uzyskać nazwy nowego pliku limitów.\n" #: convertquota.c:302 quotacheck.c:764 #, c-format msgid "Cannot rename new quotafile %s to name %s: %s\n" msgstr "Nie można zmienić nazwy nowego pliku limitów %s na %s: %s\n" #: convertquota.c:316 #, c-format msgid "Cannot open old format file for %ss on %s\n" msgstr "Nie można otworzyć pliku limitów %s w starym formacie na %s\n" #: convertquota.c:321 convertquota.c:354 #, c-format msgid "Cannot create file for %ss for new format on %s: %s\n" msgstr "Nie można utworzyć pliku limitów %s dla nowego formatu na %s: %s\n" #: convertquota.c:344 #, c-format msgid "Cannot open old quota file on %s: %s\n" msgstr "Nie można otworzyć starego pliku limitów na %s: %s\n" #: convertquota.c:381 msgid "Unknown action should be performed.\n" msgstr "Miała być wykonana nieznana akcja.\n" #: warnquota.c:59 msgid "" "Hi,\n" "\n" "We noticed that you are in violation with the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" "Cześć!\n" "\n" "Zauważyliśmy naruszenie zasad systemu limitowania przestrzeni dyskowej,\n" "używanego na tym systemie. Znaleźliśmy następujące naruszenia:\n" #: warnquota.c:61 #, c-format msgid "" "\n" "We hope that you will cleanup before your grace period expires.\n" "\n" "Basically, this means that the system thinks you are using more disk space\n" "on the above partition(s) than you are allowed. If you do not delete files\n" "and get below your quota before the grace period expires, the system will\n" "prevent you from creating new files.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" "\n" "Mamy nadzieję, że posprzątasz przed upłynięciem okresu pobłażliwości.\n" "\n" "Oznacza to, iż system uważa, że na podanych systemach plików używasz\n" "więcej miejsca, niż jesteś upoważniony. Jeżeli nie posprzątasz tak, aby\n" "znaleźć się poniżej limitów przed upłynięciem okresu pobłażliwości, system\n" "zabroni Ci tworzyć nowe pliki.\n" "\n" "Aby uzyskać dodatkowe wyjaśnienia prosimy skontaktować się z nami pod\n" "adresem %s lub telefonicznie pod numerem %s.\n" #: warnquota.c:68 #, c-format msgid "" "Hi,\n" "\n" "We noticed that the group %s you are member of violates the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" "Cześć!\n" "\n" "Zauważyliśmy, że grupa %s, której jesteś członkiem, narusza zasady\n" "systemu limitowania przestrzeni dyskowej, używanego na tym systemie.\n" "Znaleźliśmy następujące naruszenia:\n" #: warnquota.c:70 #, c-format msgid "" "\n" "Please cleanup the group data before the grace period expires.\n" "\n" "Basically, this means that the system thinks group is using more disk space\n" "on the above partition(s) than it is allowed. If you do not delete files\n" "and get below group quota before the grace period expires, the system will\n" "prevent you and other members of the group from creating new files owned by\n" "the group.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" "\n" "Prosimy posprzątać dane grupy przed upłynięciem okresu pobłażliwości.\n" "\n" "Oznacza to, iż system uważa, że na podanych systemach plików grupa używa\n" "więcej miejsca, niż jest upoważniona. Jeśli nie posprzątacie tak, aby\n" "znaleźć się poniżej limitów przed upłynięciem okresu pobłażliwości, system\n" "zabroni Ci i innym członkom grupy tworzyć nowe pliki należące do tej grupy.\n" "\n" "Aby uzyskać dodatkowe wyjaśnienia prosimy skontaktować się z nami pod\n" "adresem %s lub telefonicznie pod numerem %s.\n" #: warnquota.c:195 #, c-format msgid "Additional error info: %s\n" msgstr "" #: warnquota.c:209 msgid "ldap_initialize() failed" msgstr "" #: warnquota.c:218 msgid "ldap_start_tls_s() failed" msgstr "" #: warnquota.c:224 msgid "ldap_sasl_bind_s() failed" msgstr "" #: warnquota.c:239 #, c-format msgid "Cannot get name for uid/gid %u.\n" msgstr "Nie można uzyskać nazwy dla uid/gid %u.\n" #: warnquota.c:323 #, c-format msgid "Cannot create pipe: %s\n" msgstr "Nie można utworzyć potoku: %s\n" #: warnquota.c:329 #, c-format msgid "Cannot fork: %s\n" msgstr "Nie można wykonać fork: %s\n" #: warnquota.c:334 #, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "Nie można powielić deskryptora: %s\n" #: warnquota.c:338 #, c-format msgid "Cannot execute '%s': %s\n" msgstr "Nie można uruchomić '%s': %s\n" #: warnquota.c:343 #, c-format msgid "Cannot open pipe: %s\n" msgstr "Nie można otworzyć potoku: %s\n" #: warnquota.c:421 #, fuzzy msgid "Could not setup ldap connection.\n" msgstr "Nie można nawiązać połączenia LDAP, powrót.\n" #: warnquota.c:438 #, c-format msgid "" "Could not format LDAP search filter for %s user and %s search attribute due " "to excessive length.\n" msgstr "" #: warnquota.c:449 #, c-format msgid "Error with %s.\n" msgstr "Błąd przy %s.\n" #: warnquota.c:450 msgid "ldap_search_ext_s() failed" msgstr "" #: warnquota.c:456 #, fuzzy, c-format msgid "Multiple entries found for client %s (%d).\n" msgstr "Znaleziono wiele wpisów dla klienta %s (%d). Nie wysłano wiadomości.\n" #: warnquota.c:460 #, fuzzy, c-format msgid "Entry not found for client %s.\n" msgstr "Nie znaleziono wpisu dla klienta %s. Nie wysłano wiadomości.\n" #: warnquota.c:470 #, c-format msgid "Could not get values for %s.\n" msgstr "Nie można uzyskać wartości dla %s.\n" #: warnquota.c:516 #, c-format msgid "Administrator for a group %s not found. Cancelling mail.\n" msgstr "Nie znaleziono administratora dla grupy %s. Anulowanie poczty.\n" #: warnquota.c:568 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" "\n" " Limity bloków Limity plików\n" #: warnquota.c:569 #, c-format msgid "" "Filesystem used soft hard grace used soft hard grace\n" msgstr "" "System plików używ. mięk. twar. pobł. używ. mięk. twar. pobł.\n" #: warnquota.c:609 #, c-format msgid "Cannot wait for mailer: %s\n" msgstr "Nie można czekać na wysłanie poczty: %s\n" #: warnquota.c:611 msgid "Warning: Mailer exitted abnormally.\n" msgstr "Uwaga: Program wysyłający pocztę nie zakończył się normalnie.\n" #: warnquota.c:668 #, c-format msgid "" "Cannot open %s: %s\n" "Will use device names.\n" msgstr "" "Nie można otworzyć %s: %s\n" "Będą używane nazwy urządzeń.\n" #: warnquota.c:691 #, c-format msgid "Cannot parse line %d in quotatab (missing ':')\n" msgstr "Nie można przeanalizować linii %d w pliku quotatab (brakuje ':')\n" #: warnquota.c:705 #, c-format msgid "Cannot stat device %s (maybe typo in quotatab)\n" msgstr "Nie można wykonać stat na urządzeniu %s (może błąd w quotatab)\n" #: warnquota.c:725 #, c-format msgid "" "Incorrect format string for variable %s.\n" "Unrecognized expression %%%c.\n" msgstr "" "Niepoprawny łańcuch formatujący dla zmiennej %s.\n" "Nierozpoznane wyrażenie %%%c.\n" #: warnquota.c:739 msgid "Ignoring error in config file.\n" msgstr "" #: warnquota.c:741 msgid "" "Aborting. Use option -I if you want warnquota to ignore errors in the config " "file as it used to in older versions.\n" msgstr "" #: warnquota.c:786 #, c-format msgid "Cannot open %s: %s\n" msgstr "nie można otworzyć %s: %s\n" #: warnquota.c:808 #, c-format msgid "line %d: Line too long! Maximum is %d.\n" msgstr "" #: warnquota.c:881 #, c-format msgid "Cannot parse time at CC_BEFORE variable (line %d).\n" msgstr "Nie można przetworzyć czasu przy zmiennej CC_BEFORE (linia %d).\n" #: warnquota.c:941 #, c-format msgid "" "line %d: LDAP variable in config file but LDAP support is not compiled.\n" msgstr "" #: warnquota.c:949 #, c-format msgid "line %d: Unknown variable %s in config file.\n" msgstr "" #: warnquota.c:957 #, c-format msgid "line %d: Missing '=' in config file.\n" msgstr "" #: warnquota.c:964 #, fuzzy, c-format msgid "line %d: Unterminated last line.\n" msgstr "Niezakończona ostatnia linia, zignorowano\n" #: warnquota.c:975 #, c-format msgid "Could not format LDAP URI because it's longer than %d bytes.\n" msgstr "" #: warnquota.c:980 #, c-format msgid "" "LDAP library version >= 2.3 detected. Please use LDAP_URI instead of " "hostname and port.\n" "Generated URI %s\n" msgstr "" "Wykryto bibliotekę LDAP w wersji >= 2.3. Proszę użyć LDAP_URI zamiast nazwy " "hosta i portu.\n" "Wygenerowano URI %s\n" #: warnquota.c:1002 #, c-format msgid "Cannot open file with group administrators: %s\n" msgstr "Nie można otworzyć pliku z administratorami grup: %s\n" #: warnquota.c:1017 #, c-format msgid "Parse error at line %d. Cannot find end of group name.\n" msgstr "Błąd podczas analizy linii %d. Nie można znaleźć nazwy grupy.\n" #: warnquota.c:1026 #, c-format msgid "Parse error at line %d. Cannot find administrators name.\n" msgstr "" "Błąd podczas analizy linii %d. Nie można znaleźć nazwy administratora.\n" #: warnquota.c:1036 #, c-format msgid "" "Parse error at line %d. Trailing characters after administrators name.\n" msgstr "" "Błąd podczas analizy linii %d. Nadmiarowe znaki po nazwie administratora.\n" #: warnquota.c:1099 #, fuzzy msgid "" "Usage:\n" " warnquota [-ugsid] [-F quotaformat] [-c configfile] [-q quotatabfile] [-a " "adminsfile] [filesystem...]\n" "\n" "-u, --user warn users\n" "-g, --group warn groups\n" "-s, --human-readable[=units] display numbers in human friendly units " "(MB,\n" " GB, ...). Units can be also specified\n" " explicitely by an optional argument in " "format\n" " [kgt],[kgt] where the first character " "specifies\n" " space units and the second character " "specifies\n" " inode units\n" "-i, --no-autofs avoid autofs mountpoints\n" "-d, --no-details do not send quota information itself\n" "-F, --format=formatname use quotafiles of specific format\n" "-c, --config=config-file non-default config file\n" "-q, --quota-tab=quotatab-file non-default quotatab\n" "-a, --admins-file=admins-file non-default admins file\n" "-I, --ignore-config-errors\tignore unknown statements in config file\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "Składnia:\n" " warnquota [-ugsid] [-F format] [-c plik-konfiguracyjny] [-q plik-quotatab] " "[-a plik-admins] [system-plików...]\n" "\n" "-u, --user ostrzeżenie użytkowników\n" "-g, --group ostrzeżenie grup\n" "-s, --human-readable wysyłanie informacji w jednostkach bardziej\n" " przyjaznych dla człowieka\n" "-i, --no-autofs pomijanie punktów montowania autofs\n" "-d, --no-details bez wysyłania informacji o samych limitach\n" "-F, --format=format użycie plików limitów o podanym formacie\n" "-c, --config=plik inny niż domyślny plik konfiguracyjny\n" "-q, --quota-tab=plik inny niż domyślny plik quotatab\n" "-a, --admins-file=plik inny niż domyślny plik admins\n" "-h, --help wyświetlenie tego opisu i zakończenie\n" "-v, --version wyświetlenie informacji o wersji i " "zakończenie\n" "\n" #: warnquota.c:1174 repquota.c:134 quota.c:350 #, c-format msgid "Bad output format units for human readable output: %s\n" msgstr "" #: warnquota.c:1194 #, c-format msgid "Cannot get host name: %s\n" msgstr "Nie można uzyskać nazwy hosta: %s\n" #: quotacheck.c:92 msgid "Not enough memory.\n" msgstr "Za mało pamięci.\n" #: quotacheck.c:124 #, c-format msgid "Adding hardlink for inode %llu\n" msgstr "Dodawanie dowiązania dla i-węzła %llu\n" #: quotacheck.c:167 #, c-format msgid "Adding dquot structure type %s for %d\n" msgstr "Dodawanie struktury dquot typu %s dla %d\n" #: quotacheck.c:253 #, c-format msgid "Cannot open file %s: %s\n" msgstr "Nie można otworzyć pliku %s: %s\n" #: quotacheck.c:258 msgid "Cannot get exact used space... Results might be inaccurate.\n" msgstr "" "Nie można dokładnie uzyskać użytej przestrzeni... wyniki mogą być " "niedokładne.\n" #: quotacheck.c:296 #, c-format msgid "" "Utility for checking and repairing quota files.\n" "%s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a\n" "\n" "-u, --user check user files\n" "-g, --group check group files\n" "-c, --create-files create new quota files\n" "-b, --backup create backups of old quota files\n" "-f, --force force check even if quotas are enabled\n" "-i, --interactive interactive mode\n" "-n, --use-first-dquot use the first copy of duplicated structure\n" "-v, --verbose print more information\n" "-d, --debug print even more messages\n" "-m, --no-remount do not remount filesystem read-only\n" "-M, --try-remount try remounting filesystem read-only,\n" " continue even if it fails\n" "-R, --exclude-root exclude root when checking all filesystems\n" "-F, --format=formatname check quota files of specific format\n" "-a, --all check all filesystems\n" "-h, --help display this message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "Narzędzie do sprawdzania i naprawy plików limitów.\n" "%s [-gucbfinvdmMR] [-F <format-limitów>] system-plików|-a\n" "\n" "-u, --user sprawdzenie plików użytkowników (user)\n" "-g, --group sprawdzenie plików grup (group)\n" "-c, --create-files utworzenie nowych plików limitów\n" "-b, --backup utworzenie kopii zapasowych starych plików " "limitów\n" "-f, --force wymuszenie sprawdzenia nawet jeśli limity są " "włączone\n" "-i, --interactive tryb interaktywny\n" "-n, --use-first-dquot użycie pierwszej kopii powielonej struktury\n" "-v, --verbose wypisywanie większej ilości informacji\n" "-d, --debug wypisywanie jeszcze większej liczby komunikatów\n" "-m, --no-remount bez przemontowywania systemu plików tylko do " "odczytu\n" "-M, --try-remount próba przemontowania systemu plików tylko do " "odczytu,\n" " kontynuacja nawet jeśli się to nie powiedzie\n" "-R, --exclude-root wykluczenie głównego systemu plików przy " "sprawdzaniu\n" " wszystkich systemów plików\n" "-F, --format=format sprawdzenie plików limitów w podanym formacie\n" "-a, --all sprawdzenie wszystkich systemów plików\n" "-h, --help wyświetlenie tego opisu i zakończenie\n" "-V, --version wyświetlenie informacji o wersji i zakończenie\n" "\n" #: quotacheck.c:427 #, c-format msgid "error (%d) while opening %s\n" msgstr "błąd (%d) podczas otwierania %s\n" #: quotacheck.c:432 #, c-format msgid "error (%d) while allocating file inode bitmap\n" msgstr "błąd (%d) podczas przydzielania bitmapy i-węzłów plików\n" #: quotacheck.c:437 #, c-format msgid "errstr (%d) while allocating directory inode bitmap\n" msgstr "errstr (%d) podczas przydzielania bitmapy i-węzłów katalogów\n" #: quotacheck.c:442 #, c-format msgid "error (%d) while opening inode scan\n" msgstr "błąd (%d) podczas otwierania skanu i-węzłów\n" #: quotacheck.c:447 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "błąd (%d) podczas uruchamiania skanu i-węzłów\n" #: quotacheck.c:455 #, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "Znaleziono i_num %ld, %ld bloków\n" #: quotacheck.c:461 msgid "High uid detected.\n" msgstr "Wykryto duży uid.\n" #: quotacheck.c:477 #, c-format msgid "Something weird happened while scanning. Error %d\n" msgstr "Podczas skanowania zdarzyło się coś dziwnego. Błąd %d\n" #: quotacheck.c:510 #, c-format msgid "Cannot stat directory %s: %s\n" msgstr "Nie można wykonać stat na katalogu %s: %s\n" #: quotacheck.c:522 #, fuzzy, c-format msgid "Cannot chdir to %s: %s\n" msgstr "Nie można wykonać stat na katalogu %s: %s\n" #: quotacheck.c:527 #, fuzzy, c-format msgid "" "\n" "Cannot open directory %s: %s\n" msgstr "" "\n" "Nie można otworzyć katalogu %s: %s\n" #: quotacheck.c:539 #, c-format msgid "" "lstat: Cannot stat `%s/%s': %s\n" "Guess you'd better run fsck first !\n" "exiting...\n" msgstr "" "lstat: Nie można wykonać stat na `%s/%s': %s\n" "Lepiej najpierw uruchomić fsck!\n" "zakończenie...\n" #: quotacheck.c:551 #, c-format msgid "pushd %s/%s\n" msgstr "pushd %s/%s\n" #: quotacheck.c:567 #, c-format msgid "\tAdding %s size %lld ino %d links %d uid %u gid %u\n" msgstr "" "\tDodawanie %s, o rozmiarze %lld, i-węzeł %d, dowiązań %d uid %u gid %u\n" #: quotacheck.c:577 msgid "Scanning stored directories from directory stack\n" msgstr "Skanowanie zapisanych na stosie katalogów\n" #: quotacheck.c:581 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" "popd %s\n" "Wejście do katalogu %s\n" #: quotacheck.c:593 #, c-format msgid "Leaving %s\n" msgstr "Opuszczanie %s\n" #: quotacheck.c:633 #, c-format msgid "Going to check %s quota file of %s\n" msgstr "Rozpoczynanie sprawdzania pliku limitów %s na %s\n" #: quotacheck.c:639 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" msgstr "" "Limity %s włączone w punkcie montowania %s - quotacheck może uszkodzić " "plik.\n" #: quotacheck.c:640 quotacheck.c:966 msgid "Should I continue?" msgstr "Czy kontynuować?" #: quotacheck.c:641 quotacheck.c:967 #, c-format msgid "As you wish... Canceling check of this file.\n" msgstr "Wedle życzenia... anulowanie sprawdzania tego pliku.\n" #: quotacheck.c:646 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" "Please turn quotas off or use -f to force checking.\n" msgstr "" "Limity %s włączone w punkcie montowania %s - quotacheck może uszkodzić " "plik.\n" "Proszę wyłączyć limity lub użyć -f, aby wymusić sprawdzanie.\n" #: quotacheck.c:653 #, c-format msgid "Error while syncing quotas on %s: %s\n" msgstr "Błąd podczas synchronizacji limitów na %s: %s\n" #: quotacheck.c:658 #, c-format msgid "Cannot get quotafile name for %s\n" msgstr "Nie można uzyskać nazwy pliku limitów dla %s\n" #: quotacheck.c:663 quotaio.c:151 quotasys.c:844 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "Nie można otworzyć pliku limitów %s: %s\n" #: quotacheck.c:702 msgid "Renaming new files to proper names.\n" msgstr "Zmiana nazw nowych plików na właściwe.\n" #: quotacheck.c:704 #, c-format msgid "Cannot get name of old quotafile on %s.\n" msgstr "Nie można uzyskać nazwy starego pliku limitów na %s.\n" #: quotacheck.c:707 msgid "Old file not found.\n" msgstr "Nie znaleziono starego pliku.\n" #: quotacheck.c:710 #, c-format msgid "Error while searching for old quota file %s: %s\n" msgstr "Błąd podczas poszukiwania starego pliku limitów %s: %s\n" #: quotacheck.c:719 msgid "Old file found removed during check!\n" msgstr "Stary plik został usunięty przy sprawdzaniu!\n" #: quotacheck.c:722 #, c-format msgid "Error while opening old quota file %s: %s\n" msgstr "Błąd podczas otwierania starego pliku limitów %s: %s\n" #: quotacheck.c:728 #, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "ioctl XFS_IOC_GETFLAGS nie powiódł się: %s\n" #: quotacheck.c:732 #, c-format msgid "Quota file %s has IMMUTABLE flag set. Clearing.\n" msgstr "" "Plik limitów %s ma ustawioną flagę niezmienności (IMMUTABLE). Czyszczenie.\n" #: quotacheck.c:735 #, c-format msgid "Failed to remove IMMUTABLE flag from quota file %s: %s\n" msgstr "" "Nie udało się usunąć flagi niezmienności (IMMUTABLE) z pliku limitów %s: %s\n" #: quotacheck.c:744 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "Zmiana nazwy starego pliku limitów na %s~\n" #: quotacheck.c:750 #, c-format msgid "Name of quota file too long. Contact %s.\n" msgstr "Nazwa pliku limitów zbyt długa. Proszę o kontakt z %s.\n" #: quotacheck.c:752 #, c-format msgid "Cannot rename old quotafile %s to %s: %s\n" msgstr "Nie można zmienić nazwy starego pliku limitów %s na %s: %s\n" #: quotacheck.c:758 msgid "Renaming new quotafile\n" msgstr "Zmiana nazwy nowego pliku limitów\n" #: quotacheck.c:770 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "Nie można zmienić uprawnień %s: %s\n" #: quotacheck.c:777 #, c-format msgid "Cannot open new quota file %s: %s\n" msgstr "Nie można otworzyć nowego pliku limitów %s: %s\n" #: quotacheck.c:782 #, c-format msgid "Warning: Cannot set EXT2 flags on %s: %s\n" msgstr "Uwaga: Nie można ustawić flag EXT2 na %s: %s\n" #: quotacheck.c:802 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "Zrzucanie zgromadzonych danych typu %s.\n" #: quotacheck.c:805 #, c-format msgid "Cannot initialize IO on xfs/gfs2 quotafile: %s\n" msgstr "Nie można zainicjować we/wy na pliku limitów xfs/gfs2: %s\n" #: quotacheck.c:811 #, c-format msgid "Cannot initialize IO on new quotafile: %s\n" msgstr "Nie można zainicjować we/wy na nowym pliku limitów: %s\n" #: quotacheck.c:838 #, c-format msgid "Cannot finish IO on new quotafile: %s\n" msgstr "Nie można zakończyć we/wy na nowym pliku limitów: %s\n" #: quotacheck.c:841 msgid "Data dumped.\n" msgstr "Dane zrzucone.\n" #: quotacheck.c:849 #, c-format msgid "Cannot find checked quota file for %ss on %s!\n" msgstr "Nie można znaleźć sprawdzonego pliku limitów %s na %s!\n" #: quotacheck.c:853 #, c-format msgid "" "Cannot turn %s quotas off on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" "Nie można wyłączyć limitów %s na %s: %s\n" "Jądro nie zauważy zmian wykonanych przez checkquota.\n" #: quotacheck.c:866 #, c-format msgid "" "Cannot turn %s quotas on on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" "Nie można włączyć limitów %s na %s: %s\n" "Jądro nie zauważy zmian wykonanych przez checkquota.\n" #: quotacheck.c:892 #, c-format msgid "Substracting space used by old %s quota file.\n" msgstr "Odejmowanie miejsca użytego przez stary plik limitów %s.\n" #: quotacheck.c:894 #, c-format msgid "" "Old %s file name could not been determined. Usage will not be subtracted.\n" msgstr "" "Nie udało się określić nazwy starego pliku %s. Miejsce nie będzie odjęte.\n" #: quotacheck.c:899 #, c-format msgid "Cannot stat old %s quota file %s: %s. Usage will not be subtracted.\n" msgstr "" "Nie można wykonać stat starego pliku limitów %s %s: %s. Miejsce nie będzie " "odjęte.\n" #: quotacheck.c:911 #, c-format msgid "" "Quota structure for %s owning quota file not present! Something is really " "wrong...\n" msgstr "" "Brak struktury limitów %s dla właściciela pliku limitów! Coś jest naprawdę " "źle...\n" #: quotacheck.c:916 #, c-format msgid "Substracted %lu bytes.\n" msgstr "Odjęto %lu bajtów.\n" #: quotacheck.c:930 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "Nie można wykonać stat na punkcie montowania %s: %s\n" #: quotacheck.c:932 #, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "Punkt montowania %s nie jest katalogiem?!\n" #: quotacheck.c:965 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only. Counted values might not " "be right.\n" msgstr "" "Nie można przemontować r/o systemu plików zamontowanego pod %s. Policzone " "wartości mogą być błędne.\n" #: quotacheck.c:973 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only so counted values might " "not be right.\n" "Please stop all programs writing to filesystem or use -m flag to force " "checking.\n" msgstr "" "Nie można przemontować r/o systemu plików zamontowanego pod %s, więc " "policzone\n" "wartości mogą być błędne. Proszę zatrzymać wszystkie programy piszące na " "ten\n" "system plików lub użyć flagi -m, aby wymusić sprawdzanie.\n" #: quotacheck.c:981 msgid "Filesystem remounted read-only\n" msgstr "System plików przemontowany tylko do odczytu\n" #: quotacheck.c:984 #, c-format msgid "Scanning %s [%s] " msgstr "Skanowanie %s [%s] " #: quotacheck.c:1010 msgid "done\n" msgstr "zrobiono\n" #: quotacheck.c:1019 #, c-format msgid "Checked %d directories and %d files\n" msgstr "Sprawdzono %d katalogów i %d plików\n" #: quotacheck.c:1023 #, c-format msgid "" "Cannot remount filesystem %s read-write. cannot write new quota files.\n" msgstr "" "Nie można przemontować r/w systemu plików %s. Nie można zapisać nowych " "plików.\n" #: quotacheck.c:1024 msgid "Filesystem remounted RW.\n" msgstr "Przemontowano system plików do zapisu i odczytu.\n" #: quotacheck.c:1068 #, c-format msgid "Cannot find quota option on filesystem %s with quotas!\n" msgstr "Nie można znaleźć opcji limitów dla systemu plików %s z limitami!\n" #: quotacheck.c:1074 #, c-format msgid "Cannot detect quota format for journalled quota on %s\n" msgstr "Nie można wykryć formatu limitów dla limitów z kroniką na %s\n" #: quotacheck.c:1140 quotasys.c:1610 #, c-format msgid "Cannot get system info: %s\n" msgstr "Nie można uzyskać informacji systemowych: %s\n" #: quotacheck.c:1171 quotasys.c:934 msgid "Cannot initialize mountpoint scan.\n" msgstr "Nie można zainicjować skanu punktów montowania.\n" #: quotacheck.c:1176 #, c-format msgid "Skipping %s [%s]\n" msgstr "Pomijanie %s [%s]\n" #: quotacheck.c:1193 #, c-format msgid "" "Cannot guess format from filename on %s. Please specify format on " "commandline.\n" msgstr "" "Nie można odgadnąć formatu z nazwy pliku na %s. Proszę podać format w " "poleceniu.\n" #: quotacheck.c:1198 #, c-format msgid "Detected quota format %s\n" msgstr "Wykryto format limitów %s\n" #: quotacheck.c:1205 quotaon.c:276 msgid "" "Your kernel probably supports ext4 quota feature but you are using external " "quota files. Please switch your filesystem to use ext4 quota feature as " "external quota files on ext4 are deprecated. You can enable the feature by " "unmounting the file system and running 'tune2fs -O quota <device>'.\n" msgstr "" #: quotacheck.c:1223 msgid "" "Your kernel probably supports journaled quota but you are not using it. " "Consider switching to journaled quota to avoid running quotacheck after an " "unclean shutdown.\n" msgstr "" "Jądro prawdopodobnie obsługuje limity z kroniką, ale nie są one używane. " "Proszę rozważyć przejście na limity z kroniką, aby zapobiec uruchamianiu " "quotacheck po każdym nienormalnym zamknięciu systemu.\n" #: quotacheck.c:1236 msgid "" "Cannot find filesystem to check or filesystem not mounted with quota " "option.\n" msgstr "" "Nie znaleziono systemu plików do sprawdzenia lub nie jest zamontowany z " "obsługą limitów.\n" #: quotacheck.c:1254 #, c-format msgid "" "Allocated %d bytes memory\n" "Free'd %d bytes\n" "Lost %d bytes\n" msgstr "" "Przydzielono %d bajtów pamięci\n" "Zwolniono %d bajtów\n" "Stracono %d bajtów\n" #: quotasync.c:29 #, fuzzy, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ugP] mount-point...\n" " or: %1$s [-ugP] -a\n" " or: %1$s -h | -V\n" "\n" msgstr "" "Narzędzie do synchronizacji limitów.\n" "Składnia:\n" "%s [-ug] -a | punkt-montowania...\n" "\n" #: quotasync.c:36 #, fuzzy, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group quotas\n" "-P, --project synchronize project quotas\n" "-a, --all synchronize quotas for all mounted file systems\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "-t, --edit-period zmiana okresu pobłażliwości\n" "-T, --edit-times zmiana czasów pobłażliwości dla użytkownika/" "grupy\n" "-h, --help wyświetlenie tego opisu i zakończenie\n" "-V, --version wyświetlenie informacji o wersji i zakończenie\n" #: quotasync.c:45 #, fuzzy, c-format msgid "Report bugs to <%s>.\n" msgstr "Błędy na adres %s\n" #: quotasync.c:113 #, c-format msgid "%s quota sync failed: %s\n" msgstr "Synchronizacja limitów %s nie powiodła się: %s\n" #: quotasync.c:126 #, c-format msgid "%s quota sync failed for %s: %s\n" msgstr "Synchronizacja limitów %s dla %s nie powiodła się: %s\n" #: quota.h:22 msgid "user" msgstr "użytkownika" #: quota.h:23 msgid "group" msgstr "grupy" #: quota.h:24 msgid "project" msgstr "" #: quota.h:25 msgid "undefined" msgstr "nieznany" #: quota_nld.c:85 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -C --no-console do not try to write messages to console\n" " -b --print-below write to console also information about getting below " "hard/soft limits\n" " -D --no-dbus do not try to write messages to DBUS\n" " -F --foreground run daemon in foreground\n" msgstr "" "Składnia: %s [opcje]\n" "Opcje to:\n" " -h --help wyświetlenie tego opisu\n" " -V --version wyświetlenie informacji o wersji\n" " -C --no-console bez wypisywania komunikatów na konsoli\n" " -b --print-below wypisywanie na konsoli także informacji o zejściu poniżej " "limitów\n" " (twardych i miękkich)\n" " -D --no-dbus bez wypisywania komunikatów przez DBUS\n" " -F --foreground uruchomienie demona jako procesu pierwszoplanowego\n" #: quota_nld.c:119 rquota_svc.c:158 #, c-format msgid "Unknown option '%c'.\n" msgstr "Nieznana opcja '%c'.\n" #: quota_nld.c:125 msgid "No possible destination for messages. Nothing to do.\n" msgstr "Brak celu dla komunikatów. Nie ma nic do roboty.\n" #: quota_nld.c:151 msgid "Error parsing netlink message.\n" msgstr "Błąd analizy komunikatu netlink.\n" #: quota_nld.c:158 msgid "" "Unknown format of kernel netlink message!\n" "Maybe your quota tools are too old?\n" msgstr "" "Nieznany format komunikatu netlink jądra!\n" "Może narzędzia quota są za stare?\n" #: quota_nld.c:182 #, fuzzy msgid "Cannot allocate netlink socket!\n" msgstr "Nie można przydzielić uchwytu netlink!\n" #: quota_nld.c:188 #, c-format msgid "Cannot register callback for netlink messages: %s\n" msgstr "" "Nie można zarejestrować wywołania zwrotnego dla komunikatów netlink: %s\n" #: quota_nld.c:193 #, c-format msgid "Cannot connect to netlink socket: %s\n" msgstr "Nie można połączyć się z gniazdem netlink: %s\n" #: quota_nld.c:205 #, c-format msgid "Cannot resolve quota netlink name: %s\n" msgstr "Nie można rozwiązać nazwy netlink limitów: %s\n" #: quota_nld.c:211 #, c-format msgid "Cannot join quota multicast group: %s\n" msgstr "Nie można dołączyć do grupy multicastowej limitów: %s\n" #: quota_nld.c:224 #, c-format msgid "Cannot connect to system DBUS: %s\n" msgstr "Nie można połączyć się z systemowym DBUS-em: %s\n" #: quota_nld.c:292 #, c-format msgid "Failed to find tty of user %llu to report warning to.\n" msgstr "" "Nie udało się odnaleźć tty użytkownika %llu w celu zgłoszenia ostrzeżenia.\n" #: quota_nld.c:297 #, c-format msgid "Failed to open tty %s of user %llu to report warning.\n" msgstr "" "Nie udało się otworzyć tty %s użytkownika %llu w celu zgłoszenia " "ostrzeżenia.\n" #: quota_nld.c:303 msgid "Warning" msgstr "Uwaga" #: quota_nld.c:306 msgid "Error" msgstr "Błąd" #: quota_nld.c:308 msgid "Info" msgstr "Informacja" #: quota_nld.c:311 msgid "file limit reached" msgstr "osiągnięto twardy limit plików" #: quota_nld.c:314 msgid "file quota exceeded too long" msgstr "miękki limit plików przekroczony zbyt długo" #: quota_nld.c:317 msgid "file quota exceeded" msgstr "przekroczono miękki limit plików" #: quota_nld.c:320 msgid "block limit reached" msgstr "osiągnięto twardy limit bloków" #: quota_nld.c:323 msgid "block quota exceeded too long" msgstr "miękki limit bloków przekroczony zbyt długo" #: quota_nld.c:326 msgid "block quota exceeded" msgstr "przekroczono miękki limit bloków" #: quota_nld.c:329 msgid "got below file limit" msgstr "zejście poniżej twardego limitu plików" #: quota_nld.c:332 msgid "got below file quota" msgstr "zejście poniżej miękkiego limitu plików" #: quota_nld.c:335 msgid "got below block limit" msgstr "zejście poniżej twardego limitu bloków" #: quota_nld.c:338 msgid "got below block quota" msgstr "zejście poniżej miękkiego limitu bloków" #: quota_nld.c:341 msgid "unknown quota warning" msgstr "nieznane ostrzeżenie dotyczące limitów" #: quota_nld.c:345 #, c-format msgid "Failed to write quota message for user %llu to %s: %s\n" msgstr "" "Nie udało się wypisać komunikatu o limicie dla użytkownika %llu na %s: %s\n" #: quota_nld.c:358 msgid "Cannot create DBUS message: No enough memory.\n" msgstr "Nie można utworzyć komunikatu DBUS: za mało pamięci.\n" #: quota_nld.c:376 msgid "Failed to write message to dbus: No enough memory.\n" msgstr "Nie udało się wypisać komunikatu przez dbus: za mało pamięci.\n" #: quota_nld.c:392 #, c-format msgid "Failed to read or parse quota netlink message: %s\n" msgstr "Nie udało się odczytać lub przeanalizować komunikatu netlink: %s\n" #: quota_nld.c:403 msgid "Undefined program name.\n" msgstr "Niezdefiniowana nazwa programu.\n" #: quota_nld.c:408 msgid "Not enough memory to build PID file name.\n" msgstr "Za mało pamięci, aby zbudować nazwę pliku PID.\n" #: quota_nld.c:427 #, c-format msgid "Could not open PID file '%s': %s\n" msgstr "Nie udało się otworzyć pliku PID '%s': %s\n" #: quota_nld.c:433 #, c-format msgid "Could not write daemon's PID into '%s'.\n" msgstr "Nie udało się zapisać PID-u demona do '%s'.\n" #: quota_nld.c:440 #, c-format msgid "Could not close PID file '%s'.\n" msgstr "Nie udało się zamknąć pliku PID-u '%s'.\n" #: quota_nld.c:470 msgid "Could not register PID file removal on SIGTERM.\n" msgstr "Nie udało się zarejestrować usuwania pliku PID-u pod SIGTERM.\n" #: quota_nld.c:472 #, c-format msgid "Could not store my PID %jd.\n" msgstr "Nie udało się zapisać własnego PID-u %jd.\n" #: quota_nld.c:489 rquota_svc.c:537 #, fuzzy, c-format msgid "Failed to daemonize: %s\n" msgstr "Nie udało się usunąć limitów: %s\n" #: repquota.c:51 #, fuzzy, c-format msgid "" "Utility for reporting quotas.\n" "Usage:\n" "%s [-vugsi] [-c|C] [-t|n] [-F quotaformat] [-O (default | xml | csv)] (-a | " "mntpoint)\n" "\n" "-v, --verbose display also users/groups without any usage\n" "-u, --user display information about users\n" "-g, --group display information about groups\n" "-P, --project display information about projects\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" "-t, --truncate-names truncate names to 9 characters\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-n, --no-names do not translate uid/gid to name\n" "-i, --no-autofs avoid autofs mountpoints\n" "-c, --cache translate big number of ids at once\n" "-C, --no-cache translate ids one by one\n" "-F, --format=formatname report information for specific format\n" "-O, --output=format format output as xml or csv\n" "-a, --all report information for all mount points with\n" " quotas\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "Narzędzie do raportowania o limitach.\n" "Składnia:\n" "%s [-vugsi] [-c|C] [-t|n] [-F format] (-a | punkt-montowania)\n" "\n" "-v, --verbose wyświetlanie także użytkowników/grup nie\n" " zajmujących miejsca\n" "-u, --user wyświetlanie informacji o użytkownikach\n" "-g, --group wyświetlanie informacji o grupach\n" "-s, --human-readable wyświetlanie liczb w jednostkach przyjaznych " "dla\n" " człowieka (MB, GB...)\n" "-t, --truncate-names obcinanie nazw do 9 znaków\n" "-p, --raw-grace wypisywanie czasu pobłażliwości w sekundach od " "epoch\n" "-n, --no-names bez tłumaczenia uidów/gidów na nazwy\n" "-i, --no-autofs pomijanie punktów montowania autofs\n" "-c, --batch-translation tłumaczenie dużej liczby identyfikatorów naraz\n" "-C, --no-batch-translation tłumaczenie identyfikatorów po jednym\n" "-F, --format=format raportowanie informacji dla podanego formatu\n" "-h, --help wyświetlenie tego opisu i zakończenie\n" "-V, --version wyświetlenie informacji o wersji i zakończenie\n" "\n" #: repquota.c:167 msgid "Repquota cannot report through RPC calls.\n" msgstr "repquota nie może raportować poprzez wywołania RPC.\n" #: repquota.c:171 msgid "Specified both -n and -t but only one of them can be used.\n" msgstr "Podano jednocześnie -n i -t, ale tylko jedna z nich może być użyte.\n" #: repquota.c:375 msgid "User" msgstr "Użytkownik" #: repquota.c:377 msgid "Group" msgstr "Grupa" #: repquota.c:379 msgid "Project" msgstr "" #: repquota.c:382 #, c-format msgid "*** Report for %s quotas on device %s\n" msgstr "*** Raport dla limitów %s na urządzeniu %s\n" #: repquota.c:391 msgid "Space" msgstr "miejsca" #: repquota.c:393 msgid "Block" msgstr "bloków" #: repquota.c:394 #, c-format msgid "Block grace time: %s; Inode grace time: %s\n" msgstr "" "Okres pobłażliwości dla bloków: %s; Okres pobłażliwości dla i-węzłów: %s\n" #: repquota.c:395 #, c-format msgid " %s limits File limits\n" msgstr " Limity %-7s Limity plików\n" #: repquota.c:396 #, c-format msgid "%-9s used soft hard grace used soft hard grace\n" msgstr "%-9s używ. mięk. twar. pobł. używ. mięk. twar. pobł.\n" #: quotacheck_v1.c:32 #, c-format msgid "Cannot read entry for id %u from quotafile %s: %s\n" msgstr "Nie można odczytać wpisu dla id %u z pliku limitów %s: %s\n" #: quotacheck_v1.c:35 #, c-format msgid "Entry for id %u is truncated.\n" msgstr "Wpis dla id %u jest ucięty.\n" #: quotacheck_v1.c:64 msgid "Loading first quota entry with grace times.\n" msgstr "Wczytywanie pierwszego wpisu limitów z okresami pobłażliwości.\n" #: quotacheck_v1.c:68 #, c-format msgid "Cannot read first entry from quotafile %s: %s\n" msgstr "Nie można odczytać pierwszego wpisu z pliku limitów %s: %s\n" #: quotacheck_v1.c:72 #, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "UWAGA - plik limitów %s zapewne był ucięty. Nie można zapisać ustawień...\n" #: quotacheck_v1.c:78 msgid "First entry loaded.\n" msgstr "Wczytano pierwszy wpis.\n" #: quotacheck_v2.c:55 msgid "Checking quotafile info...\n" msgstr "Sprawdzanie informacji w pliku limitów...\n" #: quotacheck_v2.c:60 #, c-format msgid "Cannot read info from quota file %s: %s\n" msgstr "Nie można odczytać informacji z pliku limitów %s: %s\n" #: quotacheck_v2.c:65 #, c-format msgid "" "WARNING - Quota file %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "UWAGA - plik limitów %s zapewne był ucięty. Nie można zapisać ustawień...\n" #: quotacheck_v2.c:77 msgid "WARNING - Quota file info was corrupted.\n" msgstr "UWAGA - informacje w pliku limitów były uszkodzone.\n" #: quotacheck_v2.c:78 #, c-format msgid "" "Size of file: %lu\n" "Blocks: %u Free block: %u Block with free entry: %u Flags: %x\n" msgstr "" "Rozmiar pliku: %lu\n" "Bloki: %u Wolny blok: %u Blok z wolnym wpisem: %u Flagi: %x\n" #: quotacheck_v2.c:85 #, c-format msgid "" "Setting grace times and other flags to default values.\n" "Assuming number of blocks is %u.\n" msgstr "" "Ustawianie okresów pobłażliwości i innych flag na wartości domyślne.\n" "Przyjęcie liczby bloków %u.\n" #: quotacheck_v2.c:102 msgid "File info done.\n" msgstr "Informacje z pliku wczytane.\n" #: quotacheck_v2.c:113 msgid "Corrupted blocks: " msgstr "Bloki uszkodzone: " #: quotacheck_v2.c:117 #, c-format msgid "Block %u: " msgstr "Blok %u: " #: quotacheck_v2.c:179 msgid "Duplicated entries." msgstr "Powtórzone wpisy." #: quotacheck_v2.c:183 #, c-format msgid "" "Found more structures for ID %u. Using values: BHARD: %lld BSOFT: %lld " "IHARD: %lld ISOFT: %lld\n" msgstr "" "Znaleziono więcej struktur dla ID %u. Użycie wartości: BHARD: %lld BSOFT " "%lld IHARD: %lld ISOFT: %lld\n" #: quotacheck_v2.c:191 #, c-format msgid "" "Found more structures for ID %u. Values: BHARD: %lld/%lld BSOFT: %lld/%lld " "IHARD: %lld/%lld ISOFT: %lld/%lld\n" msgstr "" "Znaleziono więcej struktur dla ID %u. Wartości: BHARD %lld/%lld BSOFT: %lld/" "%lld IHARD: %lld/%lld ISOFT: %lld/%lld\n" #: quotacheck_v2.c:196 msgid "Should I use new values?" msgstr "Czy użyć nowych wartości?" #: quotacheck_v2.c:206 #, c-format msgid "" "ID %u has more structures. User intervention needed (use -i for interactive " "mode or -n for automatic answer).\n" msgstr "" "ID %u ma więcej struktur. Potrzebna inwencja użytkownika (-i dla trybu " "interaktywnego lub -n dla automatycznej odpowiedzi).\n" #: quotacheck_v2.c:243 #, c-format msgid "Block %u is truncated.\n" msgstr "Blok %u jest ucięty.\n" #: quotacheck_v2.c:252 #, c-format msgid "Reference to illegal block %u" msgstr "Odniesienie do nieprawidłowego bloku %u" #: quotacheck_v2.c:259 #, c-format msgid "Block %u in tree referenced twice" msgstr "Dwukrotne odniesienie w drzewie do bloku %u" #: quotacheck_v2.c:275 #, c-format msgid "Illegal free block reference to block %u" msgstr "Błędne odniesienie pustego bloku do bloku %u" #: quotacheck_v2.c:278 #, c-format msgid "Corrupted number of used entries (%u)" msgstr "Uszkodzona liczba użytych wpisów (%u)" #: quotacheck_v2.c:330 #, c-format msgid "" "Quota file %s has corrupted headers. You have to specify quota format on " "command line.\n" msgstr "" "Plik limitów %s ma uszkodzone nagłówki. Trzeba określić format limitów z " "linii poleceń.\n" #: quotacheck_v2.c:346 msgid "Checking quotafile headers...\n" msgstr "Sprawdzanie nagłówków pliku limitów...\n" #: quotacheck_v2.c:350 #, c-format msgid "Cannot read header from quotafile %s: %s\n" msgstr "Nie można odczytać nagłówka z pliku limitów %s: %s\n" #: quotacheck_v2.c:352 #, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" "UWAGA - plik limitów %s zapewne był ucięty. Nie można zapisać ustawień...\n" #: quotacheck_v2.c:358 #, c-format msgid "WARNING - Quota file %s has corrupted headers\n" msgstr "UWAGA - plik limitów %s ma uszkodzone nagłówki\n" #: quotacheck_v2.c:361 #, fuzzy msgid "Continue checking assuming format from command line?" msgstr "Kontynuować sprawdzanie przy założeniu wersji podanej z linii poleceń?" #: quotacheck_v2.c:365 #, c-format msgid "" "Quota file format version %d does not match the one specified on command " "line (%d). Quota file header may be corrupted.\n" msgstr "" "Wersja formatu pliku limitów %d nie zgadza się z wersją podaną z linii " "poleceń (%d). Plik limitów może być uszkodzony.\n" #: quotacheck_v2.c:370 msgid "Continue checking assuming version from command line?" msgstr "Kontynuować sprawdzanie przy założeniu wersji podanej z linii poleceń?" #: quotacheck_v2.c:376 msgid "Headers checked.\n" msgstr "Nagłówki sprawdzone.\n" #: quotacheck_v2.c:392 #, c-format msgid "Do not know how to buffer format %d\n" msgstr "Nie wiem jak buforować format %d\n" #: quotacheck_v2.c:402 #, c-format msgid "Headers of file %s checked. Going to load data...\n" msgstr "Nagłówki pliku %s sprawdzone. Rozpoczęcie wczytywania danych...\n" #: quotacheck_v2.c:410 msgid "Cannot gather quota data. Tree root node corrupted.\n" msgstr "Nie można zgromadzić danych o limitach. Korzeń drzewa uszkodzony.\n" #: quotacheck_v2.c:418 msgid "WARNING - Some data might be changed due to corruption.\n" msgstr "UWAGA - część danych może być zmieniona z powodu uszkodzenia.\n" #: quotacheck_v2.c:421 msgid "Not found any corrupted blocks. Congratulations.\n" msgstr "Nie znaleziono żadnych uszkodzonych bloków. Gratulacje.\n" #: quotaio.c:62 msgid "Only RPC quota format is allowed on NFS filesystem.\n" msgstr "Na systemie plików NFS dozwolony jest tylko format limitów RPC.\n" #: quotaio.c:73 msgid "RPC quota format not compiled.\n" msgstr "Format limitów RPC nie wkompilowany.\n" #: quotaio.c:77 msgid "RPC quota format specified for non-NFS filesystem.\n" msgstr "Podano format limitów RPC dla systemu plików innego niż NFS.\n" #: quotaio.c:85 msgid "Only XFS quota format is allowed on XFS filesystem.\n" msgstr "Na systemie plików XFS dozwolony jest tylko format limitów XFS.\n" #: quotaio.c:96 msgid "XFS quota allowed only on XFS filesystem.\n" msgstr "Format limitów XFS dozwolony tylko na systemie plików XFS.\n" #: quotaio.c:110 msgid "Quota not supported by the filesystem.\n" msgstr "Limity nie są obsługiwane przez ten system plików.\n" #: quotaio.c:130 msgid "Cannot find any quota file to work on.\n" msgstr "Nie znaleziono żadnego pliku limitów do operowania na nim.\n" #: quotaio.c:135 msgid "Quota file not found or has wrong format.\n" msgstr "Pliku limitów nie znaleziono lub ma zły format.\n" #: quotaio.c:145 #, c-format msgid "Cannot sync quotas on device %s: %s\n" msgstr "Nie można zsynchronizować limitów na urządzeniu %s: %s\n" #: quotaio.c:176 #, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "Nie można zainicjować limitów na %s: %s\n" #: quotaio.c:203 #, c-format msgid "Creation of %s quota format is not supported.\n" msgstr "Tworzenie limitów w formacie %s nie jest obsługiwane.\n" #: quotaio.c:213 #, c-format msgid "" "Quota on %s is stored in system files and must be manipulated by fs tools.\n" msgstr "" "Limity na %s są zapisane w plikach systemowych i muszą być modyfikowane " "narzędziami dla systemu plików.\n" #: quotaio.c:223 #, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "Nie można utworzyć nowego pliku limitów %s: %s\n" #: quotaio.c:297 #, c-format msgid "" "Trying to set quota limits out of range supported by quota format on %s.\n" msgstr "" "Próba ustawienia limitów spoza zakresu obsługiwanego przez format limitów na " "%s.\n" #: quotaio.c:303 #, c-format msgid "" "Trying to set quota usage out of range supported by quota format on %s.\n" msgstr "" "Próba ustawienia wykorzystania limitów spoza zakresu obsługiwanego przez " "format limitów na %s.\n" #: quotaio_generic.c:54 #, c-format msgid "Cannot get info for %s quota file from kernel on %s: %s\n" msgstr "Nie można uzyskać od jądra informacji o pliku limitów %s na %s: %s\n" #: quotaio_generic.c:72 #, c-format msgid "Cannot set info for %s quota file from kernel on %s: %s\n" msgstr "Nie można ustawić w jądrze informacji o pliku limitów %s na %s: %s\n" #: quotaio_generic.c:84 #, c-format msgid "Cannot get quota for %s %d from kernel on %s: %s\n" msgstr "Nie można uzyskać od jądra limitu %s dla id %d na %s: %s\n" #: quotaio_generic.c:99 #, c-format msgid "Cannot set quota for %s %d from kernel on %s: %s\n" msgstr "Nie można ustawić w jądrze limitu %s dla id %d na %s: %s\n" #: quotaio_meta.c:23 msgid "Metadata init_io called when kernel support is not enabled.\n" msgstr "init_io metadanych wywołano bez włączonej obsługi w jądrze.\n" #: quotaio_meta.c:27 msgid "" "Metadata init_io called when kernel does not support generic quota " "interface!\n" msgstr "" "init_io metadanych wywołano bez obsługi ogólnego interfejsu limitów w " "jądrze!\n" #: quotaio_rpc.c:77 quotaio_v1.c:278 quotaio_v2.c:464 #, c-format msgid "Trying to write quota to readonly quotafile on %s\n" msgstr "Próba zapisu limitów do pliku limitów tylko do odczytu na %s\n" #: quotaio_tree.c:71 #, c-format msgid "Cannot write block (%u): %s\n" msgstr "Nie można zapisać bloku (%u): %s\n" #: quotaio_tree.c:94 msgid "Cannot allocate new quota block (out of disk space).\n" msgstr "Nie można przydzielić nowego bloku limitów (brak miejsca na dysku).\n" #: quotaio_tree.c:202 msgid "find_free_dqentry(): Data block full but it shouldn't.\n" msgstr "find_free_dqentry(): Blok danych jest pełny, a nie powinien.\n" #: quotaio_tree.c:237 #, c-format msgid "Inserting already present quota entry (block %u).\n" msgstr "Wstawianie już obecnego wpisu limitów (blok %u).\n" #: quotaio_tree.c:260 #, c-format msgid "Cannot write quota (id %u): %s\n" msgstr "Nie można zapisać limitów (id %u): %s\n" #: quotaio_tree.c:279 #, c-format msgid "Quota write failed (id %u): %s\n" msgstr "Zapis limitów nie powiódł się (id %u): %s\n" #: quotaio_tree.c:291 #, c-format msgid "Quota structure has offset to other block (%u) than it should (%u).\n" msgstr "Struktura limitów ma wskazanie na inny blok (%u) niż powinna (%u).\n" #: quotaio_tree.c:367 #, c-format msgid "Quota for id %u referenced but not present.\n" msgstr "Limit dla id %u nie istnieje, ale jest odniesienie do niego.\n" #: quotaio_tree.c:426 #, c-format msgid "Cannot read quota structure for id %u: %s\n" msgstr "Nie można odczytać struktury limitów dla id %u: %s\n" #: quotaio_tree.c:468 #, c-format msgid "" "Illegal reference (%u >= %u) in %s quota file on %s. Quota file is probably " "corrupted.\n" "Please run quotacheck(8) and try again.\n" msgstr "" "Niedozwolone odniesienie (%u >= %u) w pliku limitów %s na %s. Plik limitów " "jest\n" "prawdopodobnie uszkodzony. Proszę uruchomić quotacheck(8) i spróbować " "ponownie.\n" #: quotaio_v1.c:184 #, c-format msgid "Trying to write info to readonly quotafile on %s.\n" msgstr "Próba zapisu informacji do pliku limitów tylko do odczytu na %s.\n" #: quotaio_v2.c:255 msgid "" "Your quota file is stored in wrong endianity. Please use convertquota(8) to " "convert it.\n" msgstr "" "Plik limitów jest zapisany dla innego procesora. Do konwersji służy " "convertquota(8).\n" #: quotaio_v2.c:388 #, c-format msgid "Trying to write info to readonly quotafile on %s\n" msgstr "Próba zapisu informacji do pliku limitów tylko do odczytu na %s\n" #: quotaio_v2.c:518 #, c-format msgid "" "Statistics:\n" "Total blocks: %u\n" "Data blocks: %u\n" "Entries: %u\n" "Used average: %f\n" msgstr "" "Statystyki:\n" "Bloków w sumie: %u\n" "Bloków danych: %u\n" "Wpisów: %u\n" "Użyte średnio: %f\n" #: quotaio_xfs.c:53 msgid "Truncating kernel returned time stamp." msgstr "" #: quotaio_xfs.c:311 #, c-format msgid "*** Status for %s quotas on device %s\n" msgstr "*** Raport dla limitów %s na urządzeniu %s\n" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "ON" msgstr "WŁĄCZONE" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "OFF" msgstr "WYŁĄCZONE" #: quotaio_xfs.c:315 quotaio_xfs.c:319 quotaio_xfs.c:323 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "Podliczanie: %s; Wymuszanie: %s\n" #: quotaio_xfs.c:335 quotaio_xfs.c:339 quotaio_xfs.c:343 #, c-format msgid "Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n" msgstr "Podliczanie [na dysku]: %s; Wymuszanie [na dysku]: %s\n" #: quotaio_xfs.c:352 quotaio_xfs.c:361 quotaio_xfs.c:374 #, c-format msgid "Inode: none\n" msgstr "I-węzeł: żaden\n" #: quotaio_xfs.c:354 quotaio_xfs.c:363 quotaio_xfs.c:376 #, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "I-węzeł: #%llu (%llu bloków, %u ekstentów)\n" #: quotaon.c:37 #, fuzzy, c-format msgid "" "Usage:\n" "\t%s [-guPvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guPvp] [-F quotaformat] [-x state] filesys ...\n" "\n" "-a, --all %s\n" "-f, --off turn quotas off\n" "-u, --user operate on user quotas\n" "-g, --group operate on group quotas\n" "-P, --project operate on project quotas\n" "-p, --print-state print whether quotas are on or off\n" "-x, --xfs-command=cmd perform XFS quota command\n" "-F, --format=formatname operate on specific quota format\n" "-v, --verbose print more messages\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" msgstr "" "Skladnia:\n" "\t%s [-guvp] [-F format] [-x stan] -a\n" "\t%s [-guvp] [-F format] [-x stan] system-plików ...\n" "\n" "-a, --all %s\n" "-f, --off wyłączenie limitów\n" "-u, --user operowanie na limitach użytkowników\n" "-g, --group operowanie na limitach grup\n" "-p, --print-state wypisanie, czy limity są włączone czy " "wyłączone\n" "-x, --xfs-command=polecenie wykonanie polecenia dla limitów XFS\n" "-F, --format=format operowanie na podanym formacie limitów\n" "-v, --verbose wypisywanie większej liczby komunikatów\n" "-h, --help wyświetlenie tego opisu i zakończenie\n" "-V, --verbose wyświetlenie informacji o wersji i zakończenie\n" #: quotaon.c:51 msgid "turn quotas off for all filesystems" msgstr "wyłączenie limitów na wszystkich systemach plików" #: quotaon.c:52 msgid "turn quotas on for all filesystems" msgstr "włączenie limitów na wszystkich systemach plików" #: quotaon.c:117 msgid "Cannot turn on/off quotas via RPC.\n" msgstr "Nie można włączyć/wyłączyć limitów przez RPC.\n" #: quotaon.c:164 #, c-format msgid "set root_squash on %s: %s\n" msgstr "ustawianie root_squash na %s: %s\n" #: quotaon.c:168 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "%s: wyłączono %s root_squash\n" #: quotaon.c:170 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "%s: włączono %s root_squash\n" #: quotaon.c:188 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "quotactl na %s [%s]: %s\n" #: quotaon.c:191 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "%s [%s]: limity %s wyłączone\n" #: quotaon.c:204 #, c-format msgid "cannot find %s on %s [%s]\n" msgstr "nie można znaleźć %s na %s [%s]\n" #: quotaon.c:206 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "użycie %s na %s [%s]: %s\n" #: quotaon.c:208 msgid "Maybe create new quota files with quotacheck(8)?\n" msgstr "Może utworzyć nowe pliki limitów przez quotacheck(8)?\n" #: quotaon.c:210 msgid "Quota format not supported in kernel.\n" msgstr "Format limitów nie obsługiwany przez jądro.\n" #: quotaon.c:213 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "%s [%s]: limity %s włączone\n" #: quotaon.c:254 msgid "Cannot change state of GFS2 quota.\n" msgstr "Nie można zmienić stanu limitów GFS2.\n" #: quotaon.c:259 msgid "Cannot change state of XFS quota. It's not compiled in kernel.\n" msgstr "Nie można zmienić stanu limitów XFS. Nie są wkompilowane w jądro.\n" #: quotaon.c:295 #, c-format msgid "Cannot find quota file on %s [%s] to turn quotas on/off.\n" msgstr "" "Nie można znaleźć pliku limitów na %s [%s], aby włączyć/wyłączyć limity.\n" #: quotaon.c:300 #, c-format msgid "Quota file on %s [%s] does not exist or has wrong format.\n" msgstr "Plik limitów na %s [%s] nie istnieje lub ma niewłaściwy format.\n" #: quotaon.c:330 quotaon.c:346 msgid "off" msgstr "wyłączone" #: quotaon.c:332 #, fuzzy msgid "on (accounting)" msgstr "i podliczania " #: quotaon.c:334 msgid "on (enforced)" msgstr "" #: quotaon.c:346 msgid "on" msgstr "włączone" #: quotaon.c:348 #, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "Limity %s na %s (%s) są %s\n" #: quotaon.c:365 #, c-format msgid "Name must be quotaon or quotaoff not %s\n" msgstr "Nazwą musi być quotaon, lub quotaoff, nie %s\n" #: quotaon.c:371 #, c-format msgid "Required format %s not supported by kernel.\n" msgstr "Wymagany format %s nie obsługiwany przez jądro.\n" #: quotaon.c:373 msgid "Warning: No quota format detected in the kernel.\n" msgstr "Uwaga: Nie wykryto formatu limitów w jądrze.\n" #: quotaon.c:380 #, c-format msgid "%s: Quota cannot be turned on on NFS filesystem\n" msgstr "%s: nie można włączyć limitów na systemie plików NFS\n" #: quotaon_xfs.c:36 #, c-format msgid "quotactl() on %s: %s\n" msgstr "quotactl() na %s: %s\n" #: quotaon_xfs.c:68 quotaon_xfs.c:88 #, c-format msgid "Enabling %s quota on root filesystem (reboot to take effect)\n" msgstr "Włączanie limitów %s na / (zostaną uwzględnione po reboocie)\n" #: quotaon_xfs.c:72 #, c-format msgid "Enable XFS %s quota accounting during mount\n" msgstr "Należy włączyć podliczanie limitów %s na XFS podczas montowania\n" #: quotaon_xfs.c:82 #, c-format msgid "Cannot delete %s quota on %s - switch quota accounting off first\n" msgstr "" "Nie można usunąć limitów %s na %s - najpierw trzeba wyłączyć podliczanie\n" #: quotaon_xfs.c:95 #, c-format msgid "Enabling %s quota enforcement on %s\n" msgstr "Włączanie wymuszania limitów %s na %s\n" #: quotaon_xfs.c:98 #, c-format msgid "Already accounting %s quota on %s\n" msgstr "Podliczanie limitów %s było już włączone na %s\n" #: quotaon_xfs.c:105 #, c-format msgid "Disabling %s quota accounting on %s\n" msgstr "Wyłączanie podliczania limitów %s na %s\n" #: quotaon_xfs.c:109 #, c-format msgid "Quota enforcement already disabled for %s on %s\n" msgstr "Wymuszenie limitów %s było już wyłączone na %s\n" #: quotaon_xfs.c:118 #, c-format msgid "" "Cannot delete %s quota on %s - switch quota enforcement and accounting off " "first\n" msgstr "" "Nie można usunąć limitów %s na %s - najpierw należy wyłączyć wymuszanie i " "podliczanie\n" #: quotaon_xfs.c:123 #, c-format msgid "Enforcing %s quota already on %s\n" msgstr "Wymuszanie limitów %s było już włączone na %s\n" #: quotaon_xfs.c:130 #, c-format msgid "Cannot switch off %s quota accounting on %s when enforcement is on\n" msgstr "" "Nie można wyłączyć podliczania limitów %s na %s kiedy wymuszanie jest " "włączone\n" #: quotaon_xfs.c:138 msgid "and accounting " msgstr "i podliczania " #: quotaon_xfs.c:139 #, c-format msgid "Disabling %s quota enforcement %son %s\n" msgstr "Wyłączanie wymuszania %2$slimitów %1$s na %3$s\n" #: quotaon_xfs.c:145 #, c-format msgid "Unexpected XFS quota state sought on %s\n" msgstr "Zauważono nieoczekiwany stan limitów XFS na %s\n" #: quotaon_xfs.c:160 #, c-format msgid "quotactl on %s: %s\n" msgstr "quotactl na %s: %s\n" #: quotaon_xfs.c:164 #, c-format msgid "%s: %s quotas turned off\n" msgstr "%s: limity %s wyłączone\n" #: quotaon_xfs.c:166 #, c-format msgid "%s: %s quotas turned on\n" msgstr "%s: limity %s włączone\n" #: quotaon_xfs.c:180 #, c-format msgid "Failed to delete quota: %s\n" msgstr "Nie udało się usunąć limitów: %s\n" #: quotaon_xfs.c:185 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "%s: usunięto bloki limitów %s\n" #: quotaon_xfs.c:248 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "Błędny argument \"%s\"\n" #: quotaops.c:82 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "%s (uid %d): Brak uprawnień\n" #: quotaops.c:94 #, c-format msgid "%s (gid %d): gid set allocation (%d): %s\n" msgstr "%s (gid %d): przydzielenie zbioru gid (%d): %s\n" #: quotaops.c:105 #, c-format msgid "%s (gid %d): error while trying getgroups(): %s\n" msgstr "%s (gid %d): błąd podczas próby wykonania getgroups(): %s\n" #: quotaops.c:116 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "%s (gid %d): Brak uprawnień\n" #: quotaops.c:134 #, fuzzy msgid "Cannot connect to RPC quota service" msgstr "Nie można połączyć się z gniazdem netlink: %s\n" #: quotaops.c:136 msgid "Quota not enabled" msgstr "" #: quotaops.c:141 #, c-format msgid "error while getting quota from %s for %s (id %u): %s\n" msgstr "błąd podczas uzyskiwania limitów z %s dla %s (id %u): %s\n" #: quotaops.c:169 #, c-format msgid "Cannot write quota for %u on %s: %s\n" msgstr "Nie można zapisać limitów dla %u na %s: %s\n" #: quotaops.c:204 quotaops.c:206 #, fuzzy, c-format msgid "%s failed: %s\n" msgstr "Synchronizacja limitów %s nie powiodła się: %s\n" #: quotaops.c:220 msgid "Too many parameters to editor.\n" msgstr "Zbyt dużo parametrów dla edytora.\n" #: quotaops.c:228 #, c-format msgid "Cannot exec %s\n" msgstr "Nie można uruchomić %s\n" #: quotaops.c:245 #, fuzzy, c-format msgid "Cannot truncate a file: %s\n" msgstr "Nie można wykonać stat na pliku limitów %s: %s\n" #: quotaops.c:247 #, fuzzy, c-format msgid "Cannot reset a file offset: %s\n" msgstr "Nie można odczytać pliku statystyk %s: %s\n" #: quotaops.c:249 #, fuzzy, c-format msgid "Cannot duplicate a file descriptor: %s\n" msgstr "Nie można powielić deskryptora: %s\n" #: quotaops.c:251 #, fuzzy, c-format msgid "Cannot open a stream to write to: %s\n" msgstr "Nie można ponownie otworzyć pliku tymczasowego: %s\n" #: quotaops.c:252 #, fuzzy, c-format msgid "Cannot open a stream to read from: %s\n" msgstr "Nie można ponownie otworzyć pliku tymczasowego: %s\n" #: quotaops.c:268 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "Limity dyskowe %s %s (%cid %d):\n" #: quotaops.c:272 #, c-format msgid "" " Filesystem blocks soft hard inodes " "soft hard\n" msgstr "" " System plików bloki miękki twardy i-węzły " "miękki twardy\n" #: quotaops.c:305 #, c-format msgid "WARNING - %s: cannot change current block allocation\n" msgstr "UWAGA - %s: nie można zmienić aktualnego przydziału bloków\n" #: quotaops.c:308 #, c-format msgid "WARNING - %s: cannot change current inode allocation\n" msgstr "UWAGA - %s: nie można zmienić aktualnego przydziału i-węzłów\n" #: quotaops.c:334 msgid "Bad format: two title lines assumed\n" msgstr "" #: quotaops.c:345 #, c-format msgid "" "Bad format:\n" "%s\n" msgstr "" "Zły format:\n" "%s\n" #: quotaops.c:351 #, fuzzy, c-format msgid "Bad block usage: %s: %s\n" msgstr "Nie można odczytać bloku %u: %s\n" #: quotaops.c:358 #, fuzzy, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "Błędny miękki limit bloków" #: quotaops.c:365 #, fuzzy, c-format msgid "Bad block hard limit: %s: %s\n" msgstr "Błędny twardy limit bloków" #: quotaops.c:372 #, fuzzy, c-format msgid "Bad inode usage: %s: %s\n" msgstr "nie można otworzyć %s: %s\n" #: quotaops.c:379 #, fuzzy, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "Błędny miękki limit i-węzłów" #: quotaops.c:386 #, fuzzy, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "Błędny twardy limit i-węzłów" #: quotaops.c:439 #, c-format msgid "Times to enforce softlimit for %s %s (%cid %d):\n" msgstr "Okresy wymuszenia miękkich limitów %s %s (%cid %d):\n" #: quotaops.c:441 quotaops.c:544 #, c-format msgid "Time units may be: days, hours, minutes, or seconds\n" msgstr "Jednostkami czasu mogą być: days, hours, minutes, seconds\n" #: quotaops.c:443 #, c-format msgid "" " Filesystem block grace inode grace\n" msgstr "" " System plików Pobłażliwość dla bloków Pobłażliwość dla i-węzłów\n" #: quotaops.c:448 quotaops.c:454 quotaops.c:499 quotaops.c:512 setquota.c:288 #: setquota.c:294 msgid "unset" msgstr "nie ustawiona" #: quotaops.c:450 quotaops.c:456 msgid "0seconds" msgstr "0 sekund" #: quotaops.c:452 quotaops.c:458 quotasys.c:504 #, c-format msgid "%useconds" msgstr "%u sekund" #: quotaops.c:485 quotaops.c:584 msgid "Bad format: three title lines assumed\n" msgstr "" #: quotaops.c:495 quotaops.c:592 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" "zły format:\n" "%s\n" #: quotaops.c:506 quotaops.c:598 msgid "Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n" msgstr "" "Złe jednostki czasu. Jednostkami są 'second', 'minute', 'hour' i 'day'.\n" #: quotaops.c:542 #, c-format msgid "Grace period before enforcing soft limits for %ss:\n" msgstr "Okres pobłażliwości przed wymuszeniem miękkich limitów %s:\n" #: quotaops.c:545 #, c-format msgid " Filesystem Block grace period Inode grace period\n" msgstr "" " System plików Pobłażliwość dla bloków Pobłażliwość dla i-węzłów\n" #: quotastats.c:48 #, c-format msgid "Cannot read stat file %s: %s\n" msgstr "Nie można odczytać pliku statystyk %s: %s\n" #: quotastats.c:83 #, c-format msgid "Error while getting quota statistics from kernel: %s\n" msgstr "Błąd podczas pobierania od jądra statystyk limitów: %s\n" #: quotastats.c:87 #, c-format msgid "Error while getting old quota statistics from kernel: %s\n" msgstr "Błąd podczas pobierania od jądra starych statystyk limitów: %s\n" #: quotastats.c:101 #, c-format msgid "Kernel quota version: old\n" msgstr "Wersja limitów w jądrze: stara\n" #: quotastats.c:103 #, c-format msgid "Kernel quota version: %u.%u.%u\n" msgstr "Wersja limitów w jądrze: %u.%u.%u\n" #: quotastats.c:104 #, c-format msgid "Number of dquot lookups: %ld\n" msgstr "Liczba poszukiwań dquot: %ld\n" #: quotastats.c:105 #, c-format msgid "Number of dquot drops: %ld\n" msgstr "Liczba zrzutów dquot: %ld\n" #: quotastats.c:106 #, c-format msgid "Number of dquot reads: %ld\n" msgstr "Liczba odczytów dquot: %ld\n" #: quotastats.c:107 #, c-format msgid "Number of dquot writes: %ld\n" msgstr "Liczba zapisów dquot: %ld\n" #: quotastats.c:108 #, c-format msgid "Number of quotafile syncs: %ld\n" msgstr "Liczba synchronizacji pliku limitów: %ld\n" #: quotastats.c:109 #, c-format msgid "Number of dquot cache hits: %ld\n" msgstr "Liczba trafień bufora dquot: %ld\n" #: quotastats.c:110 #, c-format msgid "Number of allocated dquots: %ld\n" msgstr "Liczba przydzielonych struktur dquot: %ld\n" #: quotastats.c:111 #, c-format msgid "Number of free dquots: %ld\n" msgstr "Liczba wolnych dquot: %ld\n" #: quotastats.c:112 #, c-format msgid "Number of in use dquot entries (user/group): %ld\n" msgstr "Liczba używanych wpisów dquot (użytkownik/grupa): %ld\n" #: setquota.c:59 #, fuzzy, c-format msgid "" "Usage:\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <user|group|project>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <-p protouser|protogroup|" "protoproject> <user|group|project> -a|<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] -b [-c] -a|<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] -t <blockgrace> <inodegrace> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] <user|group|project> -T <blockgrace> " "<inodegrace> -a|<filesystem>...\n" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\n" "-P, --project set limits for project\n" "-a, --all set limits for all filesystems\n" " --always-resolve always try to resolve name, even if is\n" " composed only of digits\n" "-F, --format=formatname operate on specific quota format\n" "-p, --prototype=protoname copy limits from user/group/project\n" "-b, --batch read limits from standard input\n" "-c, --continue-batch continue in input processing in case of an error\n" msgstr "" "Składnia:\n" " setquota [-u|-g] %1$s[-F format] <użytkownik|grupa>\n" "\t<miękki-limit-bloków> <twardy-limit-bloków> <miękki-limit-iwęzłów> <twardy-" "limit-iwęzłów> -a|<system-plików>...\n" " setquota [-u|-g] %1$s[-F format] <-p wzorcowy-użytkownik|grupa> " "<użytkownik|grupa> -a|<system-plików>...\n" " setquota [-u|-g] %1$s[-F format] -b [-c] -a|<system-plików>...\n" " setquota [-u|-g] [-F format] -t <pobł-bloki> <pobł-iwęzły> -a|<system-" "plików>...\n" " setquota [-u|-g] [-F format] <użytkownik|grupa> -T <pobł-bloki> <pobł-" "iwęzły> -a|<system-plików>...\n" "\n" "-u, --user ustawienie limitów dla użytkownika\n" "-g, --group ustawienie limitów dla grupy\n" "-a, --all ustawienie limitów dla wszystkich systemów " "plików\n" " --always-resolve próba rozwiązania nazwy zawsze, nawet jeśli " "składa\n" " się wyłącznie z cyfr\n" "-F, --format=nazwa operowanie na podanym formacie limitów\n" "-p, --prototype=nazwa skopiowanie limitów od podanego użytkownika/" "grupy\n" "-b, --batch odczyt limitów ze standardowego wejścia\n" "-c, --continue-batch kontynuacja przetwarzania wejścia po błędzie\n" #: setquota.c:77 msgid "" "-r, --remote set remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" "-r, --remote zmiana zdalnego limitu (poprzez RPC)\n" "-m, --no-mixed-pathnames usunięcie początkowych / z punktów montowania " "NFSv4\n" #: setquota.c:80 #, fuzzy msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group/project\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "-t, --edit-period zmiana okresu pobłażliwości\n" "-T, --edit-times zmiana czasów pobłażliwości dla użytkownika/" "grupy\n" "-h, --help wyświetlenie tego opisu i zakończenie\n" "-V, --version wyświetlenie informacji o wersji i zakończenie\n" #: setquota.c:84 edquota.c:73 quota.c:94 #, c-format msgid "Bugs to: %s\n" msgstr "Błędy na adres: %s\n" #: setquota.c:95 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" #: setquota.c:108 setquota.c:121 #, fuzzy, c-format msgid "%s: %s: %s\n" msgstr "%s: %s\n" #: setquota.c:229 #, fuzzy msgid "Group/user/project quotas cannot be used together.\n" msgstr "Limity grupy i użytkownika nie mogą być użyte razem.\n" #: setquota.c:233 msgid "Prototype user has no sense when editing grace times.\n" msgstr "Wzorcowy użytkownik nie ma sensu przy edycji okresów pobłażliwości.\n" #: setquota.c:237 msgid "Cannot set both individual and global grace time.\n" msgstr "" "Nie można ustawić jednocześnie jednostkowych i globalnych okresów " "pobłażliwości.\n" #: setquota.c:241 msgid "Batch mode cannot be used for setting grace times.\n" msgstr "Nie można użyć trybu wsadowego do ustawienia okresów pobłażliwości.\n" #: setquota.c:245 msgid "Batch mode and prototype user cannot be used together.\n" msgstr "Tryb wsadowy i użytkownik wzorcowy nie mogą być użyte razem.\n" #: setquota.c:249 msgid "Cannot set grace times over RPC protocol.\n" msgstr "Nie można ustawić okresów pobłażliwości przy użyciu protokołu RPC.\n" #: setquota.c:272 msgid "Bad block softlimit" msgstr "Błędny miękki limit bloków" #: setquota.c:273 msgid "Bad block hardlimit" msgstr "Błędny twardy limit bloków" #: setquota.c:274 msgid "Bad inode softlimit" msgstr "Błędny miękki limit i-węzłów" #: setquota.c:275 msgid "Bad inode hardlimit" msgstr "Błędny twardy limit i-węzłów" #: setquota.c:281 setquota.c:293 msgid "Bad block grace time" msgstr "Błędny okres pobłażliwości dla bloków" #: setquota.c:282 setquota.c:299 msgid "Bad inode grace time" msgstr "Błędny okres pobłażliwości dla i-węzłów" #: setquota.c:305 msgid "Mountpoint not specified.\n" msgstr "Nie podano punktu montowania.\n" #: setquota.c:319 setquota.c:450 setquota.c:493 #, fuzzy msgid "Error getting quota information to update.\n" msgstr "Nie można uzyskać informacji o limitach dla użytkownika %s.\n" #: setquota.c:325 msgid "Error getting prototype quota information.\n" msgstr "" #: setquota.c:372 #, c-format msgid "Line %d too long.\n" msgstr "Linia %d zbyt długa.\n" #: setquota.c:384 #, c-format msgid "Cannot parse input line %d.\n" msgstr "Nie można przetworzyć linii wejścia %d.\n" #: setquota.c:386 setquota.c:394 setquota.c:403 setquota.c:412 setquota.c:421 #: setquota.c:430 msgid "Exitting.\n" msgstr "Zakończenie.\n" #: setquota.c:387 setquota.c:395 setquota.c:404 setquota.c:413 setquota.c:422 #: setquota.c:431 msgid "Skipping line.\n" msgstr "Pomijanie linii.\n" #: setquota.c:392 #, c-format msgid "Unable to resolve name '%s' on line %d.\n" msgstr "Nie można rozwiązać nazwy '%s' w linii %d.\n" #: setquota.c:400 #, fuzzy, c-format msgid "Unable to parse block soft limit '%s' on line %d: %s\n" msgstr "Nie można rozwiązać nazwy '%s' w linii %d.\n" #: setquota.c:409 #, fuzzy, c-format msgid "Unable to parse block hard limit '%s' on line %d: %s\n" msgstr "Nie można rozwiązać nazwy '%s' w linii %d.\n" #: setquota.c:418 #, fuzzy, c-format msgid "Unable to parse inode soft limit '%s' on line %d: %s\n" msgstr "Nie można rozwiązać nazwy '%s' w linii %d.\n" #: setquota.c:427 #, fuzzy, c-format msgid "Unable to parse inode hard limit '%s' on line %d: %s\n" msgstr "Nie można rozwiązać nazwy '%s' w linii %d.\n" #: setquota.c:474 #, c-format msgid "Setting grace period on %s is not supported.\n" msgstr "Ustawianie okresu pobłażliwości na %s nie jest obsługiwane.\n" #: setquota.c:500 #, c-format msgid "Not setting block grace time on %s because softlimit is not exceeded.\n" msgstr "" "Bez ustawiania czasu pobłażliwości dla bloków na %s - nie przekroczono " "limitu miękkiego.\n" #: setquota.c:504 #, c-format msgid "Not setting inode grace time on %s because softlimit is not exceeded.\n" msgstr "" "Bez ustawiania czasu pobłażliwości dla i-węzłów na %s - nie przekroczono " "limitu miękkiego.\n" #: setquota.c:515 #, c-format msgid "" "cannot write times for %s. Maybe kernel does not support such operation?\n" msgstr "" "nie można zapisać czasów %s. Może jądro nie obsługuje takiej operacji?\n" #: quotasys.c:190 #, c-format msgid "user %s does not exist.\n" msgstr "użytkownik %s nie istnieje.\n" #: quotasys.c:219 #, c-format msgid "group %s does not exist.\n" msgstr "grupa %s nie istnieje.\n" #: quotasys.c:249 #, fuzzy, c-format msgid "project %s does not exist.\n" msgstr "grupa %s nie istnieje.\n" #: quotasys.c:371 #, c-format msgid "" "Unknown quota format: %s\n" "Supported formats are:\n" " vfsold - original quota format\n" " vfsv0 - standard quota format\n" " vfsv1 - quota format with 64-bit limits\n" " rpc - use RPC calls\n" " xfs - XFS quota format\n" msgstr "" "Nieznany format limitów: %s\n" "Obsługiwane formaty to:\n" " vfsold - oryginalny format limitów\n" " vfsv0 - standardowy format limitów\n" " vfsv1 - format limitów z limitami 64-bitowymi\n" " rpc - używanie wywołań RPC\n" " xfs - format limitów na XFS\n" #: quotasys.c:398 #, c-format msgid "" "Unknown output format: %s\n" "Supported formats are:\n" " default - default\n" " csv - comma-separated values\n" " xml - simple XML\n" msgstr "" #: quotasys.c:460 quota.c:282 msgid "none" msgstr "brak" #: quotasys.c:492 #, c-format msgid "%ddays" msgstr "%d dni" #: quotasys.c:494 #, c-format msgid "%02d:%02d" msgstr "%02d:%02d" #: quotasys.c:506 #, c-format msgid "%uminutes" msgstr "%u minut" #: quotasys.c:508 #, c-format msgid "%uhours" msgstr "%u godzin" #: quotasys.c:510 #, c-format msgid "%udays" msgstr "%u dni" #: quotasys.c:519 msgid "second" msgstr "sekunda" #: quotasys.c:519 msgid "seconds" msgstr "sekund" #: quotasys.c:521 msgid "minute" msgstr "minuta" #: quotasys.c:521 msgid "minutes" msgstr "minut" #: quotasys.c:523 msgid "hour" msgstr "godzina" #: quotasys.c:523 msgid "hours" msgstr "godzin" #: quotasys.c:525 msgid "day" msgstr "dzień" #: quotasys.c:525 msgid "days" msgstr "dni" #: quotasys.c:583 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:585 msgid "K" msgstr "" #: quotasys.c:587 msgid "M" msgstr "" #: quotasys.c:589 msgid "G" msgstr "" #: quotasys.c:591 msgid "T" msgstr "" #: quotasys.c:594 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:598 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:651 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:655 msgid "k" msgstr "" #: quotasys.c:657 msgid "m" msgstr "" #: quotasys.c:659 msgid "g" msgstr "" #: quotasys.c:661 msgid "t" msgstr "" #: quotasys.c:664 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:668 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:827 #, c-format msgid "Cannot stat quota file %s: %s\n" msgstr "Nie można wykonać stat na pliku limitów %s: %s\n" #: quotasys.c:975 msgid "Not all specified mountpoints are using quota.\n" msgstr "Nie wszystkie podane punkty montowania używają limitów.\n" #: quotasys.c:989 #, c-format msgid "Error while releasing file on %s\n" msgstr "Błąd podczas zwalniania pliku na %s\n" #: quotasys.c:1048 #, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "Nie można utworzyć zbioru dla sigaction(): %s\n" #: quotasys.c:1051 #, c-format msgid "Cannot set signal handler: %s\n" msgstr "Nie można ustawić obsługi sygnału: %s\n" #: quotasys.c:1107 #, c-format msgid "Cannot reset signal handler: %s\n" msgstr "Nie można przywrócić obsługi sygnału: %s\n" #: quotasys.c:1262 msgid "Cannot open any file with mount points.\n" msgstr "Nie można otworzyć żadnego pliku z punktami montowania.\n" #: quotasys.c:1280 #, c-format msgid "Cannot get device name for %s\n" msgstr "Nie można uzyskać nazwy urządzenia dla %s\n" #: quotasys.c:1340 #, c-format msgid "Cannot resolve mountpoint path %s: %s\n" msgstr "Nie można rozwiązać ścieżki punktu montowania %s: %s\n" #: quotasys.c:1346 #, c-format msgid "Cannot statfs() %s: %s\n" msgstr "Nie można wykonać statfs() %s: %s\n" #: quotasys.c:1358 #, c-format msgid "Cannot stat() mounted device %s: %s\n" msgstr "Nie można wykonać stat() na zamontowanym urządzeniu %s: %s\n" #: quotasys.c:1363 #, c-format msgid "" "Device (%s) filesystem is mounted on unsupported device type. Skipping.\n" msgstr "" "Urządzenie (%s), na którym jest zamontowany system plików, nie jest " "obsługiwanego typu. Pominięto.\n" #: quotasys.c:1373 #, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "Nie można wykonać stat() na punkcie montowania %s: %s\n" #: quotasys.c:1442 #, c-format msgid "" "Cannot find a device with %s.\n" "Skipping...\n" msgstr "" "Nie można znaleźć urządzenia z %s.\n" "Pomijanie...\n" #: quotasys.c:1446 #, c-format msgid "" "Cannot stat() a mountpoint with %s: %s\n" "Skipping...\n" msgstr "" "Nie można wykonać stat() na punkcie montowania z %s: %s\n" "Pomijanie...\n" #: quotasys.c:1454 #, c-format msgid "" "Cannot stat() given mountpoint %s: %s\n" "Skipping...\n" msgstr "" "Nie można wykonać stat() na podanym punkcie montowania %s: %s\n" "Pomijanie...\n" #: quotasys.c:1464 #, c-format msgid "Cannot find a filesystem mountpoint for directory %s\n" msgstr "Nie można znaleźć punktu montowania systemu plików dla katalogu %s\n" #: quotasys.c:1470 #, c-format msgid "Cannot resolve path %s: %s\n" msgstr "Nie można rozwiązać ścieżki %s: %s\n" #: quotasys.c:1481 #, c-format msgid "Cannot find mountpoint for device %s\n" msgstr "Nie można znaleźć punktu montowania dla urządzenia %s\n" #: quotasys.c:1487 #, c-format msgid "Specified path %s is not directory nor device.\n" msgstr "Podana ścieżka %s nie jest katalogiem ani urządzeniem.\n" #: quotasys.c:1495 msgid "No correct mountpoint specified.\n" msgstr "Nie podano poprawnego punktu montowania.\n" #: quotasys.c:1550 #, c-format msgid "Mountpoint (or device) %s not found or has no quota enabled.\n" msgstr "" "Nie znaleziono punktu montowania (lub urządzenia) %s, albo nie ma on " "włączonych limitów.\n" #: rquota_svc.c:86 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -s --no-setquota disables remote calls to setquota (default)\n" " -S --setquota enables remote calls to setquota\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" "Składnia: %s [opcje]\n" "Opcje to:\n" " -h --help wyświetlenie tego opisu\n" " -V --version wyświetlenie informacji o wersji\n" " -F --foreground uruchomienie usługi quota jako procesu " "pierwszoplanowego\n" " -I --autofs nieignorowanie punktów obsługiwanych przez " "automounter\n" " -p --port <port> nasłuchiwanie na podanym porcie\n" " -s --no-setquota wyłączenie zdalnych wywołań setquota (domyślne)\n" " -S --setquota włączenie zdalnych wywołań setquota\n" " -x --xtab <ścieżka> ustawienie alternatywnego pliku z tabelą export NFSD\n" #: rquota_svc.c:97 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" "Składnia: %s [opcje]\n" "Opcje to:\n" " -h --help wyświetlenie tego opisu\n" " -V --version wyświetlenie informacji o wersji\n" " -F --foreground uruchomienie usługi quota jako procesu " "pierwszoplanowego\n" " -I --autofs nieignorowanie punktów obsługiwanych przez " "automounter\n" " -p --port <port> nasłuchiwanie na podanym porcie\n" " -x --xtab <ścieżka> ustawienie alternatywnego pliku z tabelą export NFSD\n" #: rquota_svc.c:144 #, c-format msgid "Illegal port number: %s\n" msgstr "Błędny numer portu: %s\n" #: rquota_svc.c:151 #, c-format msgid "Cannot access the specified xtab file %s: %s\n" msgstr "Brak dostępu do podanego pliku xtab %s: %s\n" #: rquota_svc.c:189 #, c-format msgid "unknown address family %u for RPC request\n" msgstr "" #: rquota_svc.c:195 #, c-format msgid "failed to translate address for RPC request: %s\n" msgstr "" #: rquota_svc.c:204 #, c-format msgid "host %s attempted to call setquota when disabled\n" msgstr "host %s próbował wywołać setquota kiedy ta operacja jest wyłączona\n" #: rquota_svc.c:211 #, c-format msgid "host %s attempted to call setquota from port >= 1024\n" msgstr "host %s próbował wywołać setquota z portu >= 1024\n" #: rquota_svc.c:226 #, c-format msgid "Denied access to host %s\n" msgstr "Odrzucono próbę dostępu z hosta %s\n" #: rquota_svc.c:314 rquota_svc.c:400 msgid "unable to free arguments\n" msgstr "nie można usunąć argumentów\n" #: rquota_svc.c:423 #, c-format msgid "" "Warning: Cannot open export table %s: %s\n" "Using '/' as a pseudofilesystem root.\n" msgstr "" "Uwaga: Nie można otworzyć tabeli export %s: %s\n" "Użycie '/' jako głównego katalogu pseudo systemu plików.\n" #: rquota_svc.c:474 #, fuzzy, c-format msgid "Failed to access local netconfig database: %s\n" msgstr "Nie udało się usunąć limitów: %s\n" #: rquota_svc.c:483 #, fuzzy, c-format msgid "Failed to create %s service.\n" msgstr "nie można utworzyć usługi UDP.\n" #: rquota_svc.c:488 #, fuzzy, c-format msgid "Unable to register (RQUOTAPROG, RQUOTAVERS, %s).\n" msgstr "nie można zarejestrować (RQUOTAPROG, RQUOTAVERS, UDP).\n" #: rquota_svc.c:494 #, fuzzy, c-format msgid "Unable to register (RQUOTAPROG, EXT_RQUOTAVERS, %s).\n" msgstr "nie można zarejestrować (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n" #: rquota_svc.c:542 msgid "svc_run returned\n" msgstr "svc_run powróciło\n" #: set_limits_example.c:20 #, c-format msgid "copy_user_quota_limits: Failed to set userquota for uid %ld : %s\n" msgstr "" "copy_user_quota_limits: nie udało się ustawić limitów użytkownika dla uid " "%ld : %s\n" #: set_limits_example.c:27 #, c-format msgid "copy_user_quota_limits: Failed to get userquota for uid %ld : %s\n" msgstr "" "copy_user_quota_limits: nie udało się pobrać limitów użytkownika dla uid " "%ld : %s\n" #: set_limits_example.c:43 #, c-format msgid "copy_group_quota_limits: Failed to set groupquota for gid %ld : %s\n" msgstr "" "copy_group_quota_limits: nie udało się ustawić limitów grupy dla gid %ld : " "%s\n" #: set_limits_example.c:50 #, c-format msgid "copy_group_quota_limits: Failed to get groupquota for gid %ld : %s\n" msgstr "" "copy_group_quota_limits: nie udało się odczytać limitów grupy dla gid %ld : " "%s\n" #: svc_socket.c:75 #, c-format msgid "Unrecognized bind address family: %s\n" msgstr "" #: svc_socket.c:85 #, c-format msgid "Unrecognized bind address protocol: %s\n" msgstr "" #: svc_socket.c:95 #, c-format msgid "Unrecognized address semantics: %lu\n" msgstr "" #: svc_socket.c:103 #, fuzzy, c-format msgid "Failed to construct bind address: %s\n" msgstr "Nie można przypisać do podanego adresu: %s\n" #: svc_socket.c:117 #, fuzzy, c-format msgid "Error creating socket: %s\n" msgstr "Nie można utworzyć gniazda: %s\n" #: svc_socket.c:124 #, fuzzy, c-format msgid "Cannot set IPv6 socket options: %s\n" msgstr "Nie można ustawić opcji gniazda: %s\n" #: svc_socket.c:131 #, c-format msgid "Cannot set socket options: %s\n" msgstr "Nie można ustawić opcji gniazda: %s\n" #: svc_socket.c:137 #, fuzzy, c-format msgid "Cannot bind to address: %s\n" msgstr "Nie można przypisać do podanego adresu: %s\n" #: svc_socket.c:144 #, fuzzy, c-format msgid "Cannot listen to address: %s\n" msgstr "Nie można przypisać do podanego adresu: %s\n" #: xqmstats.c:32 xqmstats.c:37 msgid "The running kernel does not support XFS\n" msgstr "Działające jądro nie obsługuje XFS\n" #: xqmstats.c:50 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "Statystyki dquot Zarządcy Limitów na XFS\n" #: xqmstats.c:51 #, c-format msgid " reclaims: %u\n" msgstr " poprawki: %u\n" #: xqmstats.c:52 #, c-format msgid " missed reclaims: %u\n" msgstr " chybione poprawki: %u\n" #: xqmstats.c:53 #, c-format msgid " dquot dups: %u\n" msgstr " duplikaty dquot: %u\n" #: xqmstats.c:54 #, c-format msgid " cache misses: %u\n" msgstr " chybienia bufora: %u\n" #: xqmstats.c:55 #, c-format msgid " cache hits: %u\n" msgstr " trafienia bufora: %u\n" #: xqmstats.c:56 #, c-format msgid " dquot wants: %u\n" msgstr " żądania dquot: %u\n" #: xqmstats.c:57 #, c-format msgid " shake reclaims: %u\n" msgstr " poprawki shake: %u\n" #: xqmstats.c:58 #, c-format msgid " inact reclaims: %u\n" msgstr " poprawki inact: %u\n" #: xqmstats.c:63 #, c-format msgid "Maximum %u dquots (currently %u incore, %u on freelist)\n" msgstr "Maksimum %u dquot (aktualnie %u w rdzeniu, %u na liście wolnych)\n" #: edquota.c:50 #, fuzzy, c-format msgid "" "Usage:\n" "\tedquota %1$s[-u] [-F formatname] [-p username] [-f filesystem] " "username ...\n" "\tedquota %1$s-g [-F formatname] [-p groupname] [-f filesystem] " "groupname ...\n" "\tedquota %1$s-P [-F formatname] [-p projectname] [-f filesystem] " "projectname ...\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -T username|groupname|" "projectname ...\n" msgstr "" "Składnia:\n" "\tedquota %1$s[-u] [-F format] [-p użytkownik] [-f system-plików] " "użytkownik ...\n" "\tedquota %1$s-g [-F format] [-p grupa] [-f system-plików] grupa ...\n" "\tedquota [-u|g] [-F format] [-f system-plików] -t\n" "\tedquota [-u|g] [-F format] [-f system-plików] -T użytkownik|grupa ...\n" #: edquota.c:55 #, fuzzy msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" "-P, --project edit project data\n" msgstr "" "\n" "-u, --user zmiana danych użytkownika\n" "-g, --group zmiana danych grupy\n" #: edquota.c:61 msgid "" "-r, --remote edit remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" "-r, --remote zmiana zdalnego limitu (poprzez RPC)\n" "-m, --no-mixed-pathnames usunięcie początkowych / z punktów mont. " "NFSv4\n" #: edquota.c:64 msgid "" "-F, --format=formatname edit quotas of a specific format\n" "-p, --prototype=name copy data from a prototype user/group\n" " --always-resolve always try to resolve name, even if it is\n" " composed only of digits\n" "-f, --filesystem=filesystem edit data only on a specific filesystem\n" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace time of a user/group\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "-F, --format=format zmiana limitów w podanym formacie\n" "-p, --prototype=nazwa skopiowanie danych od wzorcowego użytkownika/" "grupy\n" " --always-resolve próba rozwiązania nazwy zawsze, nawet jeśli\n" " składa się wyłącznie z cyfr\n" "-f, --filesystem=system-plików zmiana danych tylko na podanym systemie " "plików\n" "-t, --edit-period zmiana okresu pobłażliwości\n" "-T, --edit-times zmiana czasu pobłażliwości użytkownika/grupy\n" "-h, --help wyświetlenie tego opisu i zakończenie\n" "-V, --version wyświetlenie informacji o wersji i " "zakończenie\n" "\n" #: edquota.c:159 msgid "" "Prototype name does not make sense when editing grace period or times.\n" msgstr "Wzorcowy użytkownik nie ma sensu przy edycji okresów pobłażliwości.\n" #: edquota.c:163 msgid "Cannot change grace times over RPC protocol.\n" msgstr "Nie można zmienić okresów pobłażliwości przy użyciu protokołu RPC.\n" #: edquota.c:181 #, c-format msgid "Cannot get quota information for user %s\n" msgstr "Nie można uzyskać informacji o limitach dla użytkownika %s\n" #: edquota.c:187 msgid "fsname mismatch\n" msgstr "Nazwa systemu plików się nie zgadza\n" #: edquota.c:231 msgid "No filesystems with quota detected.\n" msgstr "Nie wykryto systemów plików z limitami.\n" #: edquota.c:247 #, c-format msgid "Cannot create temporary file: %s\n" msgstr "Nie można utworzyć pliku tymczasowego: %s\n" #: edquota.c:252 #, c-format msgid "Cannot change owner of temporary file: %s\n" msgstr "Nie można zmienić właściciela pliku tymczasowego: %s\n" #: edquota.c:259 msgid "Cannot write grace times to file.\n" msgstr "Nie można zapisać okresów pobłażliwości do pliku.\n" #: edquota.c:264 edquota.c:283 edquota.c:316 edquota.c:335 #, fuzzy msgid "Cannot stat file with times.\n" msgstr "Nie można otworzyć żadnego pliku z punktami montowania.\n" #: edquota.c:270 msgid "Error while editing grace times.\n" msgstr "Błąd podczas edycji okresów pobłażliwości.\n" #: edquota.c:281 edquota.c:333 #, fuzzy msgid "Cannot reopen!\n" msgstr "Nie można ponownie otworzyć!" #: edquota.c:291 msgid "Failed to parse grace times file.\n" msgstr "Analiza pliku okresów pobłażliwości nie powiodła się.\n" #: edquota.c:301 #, c-format msgid "Cannot get quota information for user %s.\n" msgstr "Nie można uzyskać informacji o limitach dla użytkownika %s.\n" #: edquota.c:304 msgid "Cannot write individual grace times to file.\n" msgstr "Nie można zapisać do pliku pojedynczych okresów pobłażliwości.\n" #: edquota.c:310 msgid "Cannot write quotas to file.\n" msgstr "Nie można zapisać limitów do pliku.\n" #: edquota.c:322 msgid "Error while editing quotas.\n" msgstr "Błąd podczas edycji limitów.\n" #: edquota.c:344 msgid "Cannot read individual grace times from file.\n" msgstr "Nie można odczytać z pliku pojedynczych okresów pobłażliwości.\n" #: edquota.c:350 msgid "Cannot read quotas from file.\n" msgstr "Nie można odczytać limitów z pliku.\n" #: quota.c:58 #, fuzzy msgid "Usage: quota [-guPqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "Składnia: quota [-guqvswim] [-l | [-Q | -A]] [-F format]\n" #: quota.c:59 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ...\n" msgstr "\tquota [-qvswim] [-l | [-Q | -A]] [-F format] -u użytkownik ...\n" #: quota.c:60 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ...\n" msgstr "\tquota [-qvswim] [-l | [-Q | -A]] [-F format] -g grupa ...\n" #: quota.c:61 #, fuzzy msgid "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -P projectname ...\n" msgstr "\tquota [-qvswim] [-l | [-Q | -A]] [-F format] -g grupa ...\n" #: quota.c:62 #, fuzzy msgid "\tquota [-qvswugPQm] [-F quotaformat] -f filesystem ...\n" msgstr "\tquota [-qvswugQm] [-F format] -f system-plików ...\n" #: quota.c:63 #, fuzzy msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-P, --project display quota for project\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" " --always-resolve always try to translate name to id, even if it " "is\n" "\t\t\t composed of only digits\n" "-w, --no-wrap do not wrap long lines\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-l, --local-only do not query NFS filesystems\n" "-Q, --quiet-refuse do not print error message when NFS server " "does\n" " not respond\n" "-i, --no-autofs do not query autofs mountpoints\n" "-F, --format=formatname display quota of a specific format\n" "-f, --filesystem-list display quota information only for given\n" " filesystems\n" " --filesystem=path display quota information only for given\n" " filesystem, remaining command line arguments\n" " are still treated as user/group/project names\n" "-A, --all-nfs display quota for all NFS mountpoints\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" " --show-mntpoint show mount point of the file system in output\n" " --hide-device do not show file system device in output\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" "\n" "-u, --user wyświetlenie limitów dla użytkownika\n" "-g, --group wyświetlenie limitów dla grupy\n" "-q, --quiet wypisywanie bardziej zwięzłych komunikatów\n" "-v, --verbose wypisywanie bardziej wyczerpujących komunikatów\n" "-s, --human-readable wyświetlanie liczb w jednostkach przyjaznych dla\n" " człowieka (MB, GB...)\n" " --always-resolve próba rozwiązania nazwy zawsze, nawet jeśli " "składa\n" " się wyłącznie z cyfr\n" "-w, --no-wrap niezawijanie długich linii\n" "-p, --raw-grace wypisywanie czasu pobłażliwości w sekundach od " "epoch\n" "-l, --local-only bez odpytywania serwera NFS\n" "-Q, --quiet-refuse niewypisywanie komunikatów błędów jeśli serwer " "NFS\n" " nie odpowiada\n" "-i, --no-autofs bez odpytywania punktów montowania autofs\n" "-F, --format=format wyświetlenie limitów w podanym formacie\n" "-f, --filesystem-list wyświetlenie informacji tylko dla podanych " "systemów\n" " plików\n" "-A, --nfs-all wyświetlenie limitów dla wszystkich NFS-ów\n" "-m, --no-mixed-pathnames usunięcie początkowych / z punktów montowania " "NFSv4\n" " --show-mntpoint wyświetlanie punktów montowania systemów plików\n" " --hide-device bez wyświetlania urządzeń systemów plików\n" "-h, --help wyświetlenie tego opisu i zakończenie\n" "-V, --version wyświetlenie informacji o wersji i zakończenie\n" "\n" #: quota.c:103 msgid "space" msgstr "miejsce" #: quota.c:105 msgid "blocks" msgstr "bloki" #: quota.c:107 #, c-format msgid "Disk quotas for %s %s (%cid %u): %s\n" msgstr "Ograniczenia dyskowe %s %s (%cid %u): %s\n" #: quota.c:110 msgid "Filesystem" msgstr "System plików" #: quota.c:111 quota.c:112 msgid "quota" msgstr "miękki" #: quota.c:111 quota.c:112 msgid "limit" msgstr "twardy" #: quota.c:111 quota.c:112 msgid "grace" msgstr "pobł." #: quota.c:112 msgid "files" msgstr "pliki" #: quota.c:193 msgid "File limit reached on" msgstr "Twardy limit plików osiągnięty na" #: quota.c:199 msgid "In file grace period on" msgstr "Okres pobłażliwości dla plików na" #: quota.c:203 msgid "Over file quota on" msgstr "Miękki limit dla plików przekroczony na" #: quota.c:209 msgid "Block limit reached on" msgstr "Twardy limit bloków osiągnięty na" #: quota.c:215 msgid "In block grace period on" msgstr "Okres pobłażliwości dla bloków na" #: quota.c:219 msgid "Over block quota on" msgstr "Miękki limit dla bloków przekroczony na" #: quota.c:282 msgid "no limited resources used" msgstr "" #: quota.c:390 #, fuzzy msgid "Not enough memory for filesystem names" msgstr "Za mało pamięci, aby zbudować nazwę pliku PID.\n" #: quota.c:407 #, c-format msgid "Warning: Ignoring -%c when filesystem list specified.\n" msgstr "Uwaga: Zignorowano -%c kiedy została podana lista systemów plików.\n" #: quota.c:416 msgid "No filesystem specified.\n" msgstr "Nie podano systemu plików.\n" #: quota.c:424 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "Przydzielenie zbioru gid (%d): %s\n" #: quota.c:430 #, c-format msgid "getgroups(): %s\n" msgstr "getgroups(): %s\n" #: quota.c:435 #, fuzzy msgid "Project reports not supported without project name\n" msgstr "Format limitów nie obsługiwany przez jądro.\n" #: common.c:129 #, c-format msgid "Quota utilities version %s.\n" msgstr "Narzędzia Quota w wersji %s.\n" #: common.c:130 #, c-format msgid "Compiled with:%s\n" msgstr "Skompilowano z:%s\n" #~ msgid "Line %d too long. Truncating.\n" #~ msgstr "Linia %d zbyt długa. Ucięto.\n" #~ msgid "Error in config file (line %d), ignoring\n" #~ msgstr "Błąd w pliku konfiguracyjnym (linia %d), zignorowano\n" #~ msgid "Possible error in config file (line %d), ignoring\n" #~ msgstr "Możliwy błąd w pliku konfiguracyjnym (linia %d), zignorowano\n" #~ msgid "Cannot duplicate descriptor of file to write to: %s\n" #~ msgstr "Nie można powielić deskryptora pliku do zapisu: %s\n" #~ msgid "Cannot duplicate descriptor of temp file: %s\n" #~ msgstr "Nie można powielić deskryptora pliku tymczasowego: %s\n" #~ msgid "Cannot duplicate descriptor of file to edit: %s\n" #~ msgstr "Nie można powielić deskryptora pliku do edycji: %s\n" #~ msgid "cannot create TCP service.\n" #~ msgstr "nie można utworzyć usługi TCP.\n" #~ msgid "unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n" #~ msgstr "nie można zarejestrować (RQUOTAPROG, RQUOTAVERS, TCP).\n" #~ msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" #~ msgstr "nie można zarejestrować (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" #~ msgid "Error while editing individual grace times.\n" #~ msgstr "Błąd podczas edycji pojedynczych okresów pobłażliwości.\n" #~ msgid "" #~ "LDAP library does not support ldap_initialize() but URI is specified." #~ msgstr "Biblioteka LDAP nie obsługuje ldap_initialize(), ale podano URI." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/quot.sed������������������������������������������������������������������������������0000664�0000000�0000000�00000000231�14463210551�0014677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/po/quota.pot�����������������������������������������������������������������������������0000664�0000000�0000000�00000174707�14463210551�0015113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: jack@suse.cz\n" "POT-Creation-Date: 2022-09-16 13:08+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: bylabel.c:274 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "" #: bylabel.c:294 #, c-format msgid "Error checking device name: %s\n" msgstr "" #: convertquota.c:41 #, c-format msgid "" "Utility for converting quota files.\n" "Usage:\n" "\t%s [options] mountpoint\n" "\n" "-u, --user convert user quota file\n" "-g, --group convert group quota file\n" "-e, --convert-endian convert quota file to correct endianity\n" "-f, --convert-format oldfmt,newfmt convert from old to VFSv0 quota format\n" "-h, --help show this help text and exit\n" "-V, --version output version information and exit\n" "\n" msgstr "" #: convertquota.c:48 warnquota.c:1117 quotacheck.c:314 repquota.c:73 #: common.c:131 #, c-format msgid "Bugs to %s\n" msgstr "" #: convertquota.c:97 msgid "You have to specify source and target format of conversion.\n" msgstr "" #: convertquota.c:112 quotacheck.c:400 quotasync.c:88 repquota.c:163 #: quotaon.c:113 setquota.c:264 msgid "Bad number of arguments.\n" msgstr "" #: convertquota.c:119 msgid "You have to specify action to perform.\n" msgstr "" #: convertquota.c:166 quotacheck_v2.c:241 quotaio_tree.c:58 #, c-format msgid "Cannot read block %u: %s\n" msgstr "" #: convertquota.c:191 convertquota.c:283 #, c-format msgid "Cannot commit dquot for id %u: %s\n" msgstr "" #: convertquota.c:239 msgid "Cannot read header of old quotafile.\n" msgstr "" #: convertquota.c:243 msgid "" "Bad file magic or version (probably not quotafile with bad endianity).\n" msgstr "" #: convertquota.c:254 msgid "Cannot read information about old quotafile.\n" msgstr "" #: convertquota.c:296 msgid "Cannot get name of new quotafile.\n" msgstr "" #: convertquota.c:302 quotacheck.c:764 #, c-format msgid "Cannot rename new quotafile %s to name %s: %s\n" msgstr "" #: convertquota.c:316 #, c-format msgid "Cannot open old format file for %ss on %s\n" msgstr "" #: convertquota.c:321 convertquota.c:354 #, c-format msgid "Cannot create file for %ss for new format on %s: %s\n" msgstr "" #: convertquota.c:344 #, c-format msgid "Cannot open old quota file on %s: %s\n" msgstr "" #: convertquota.c:381 msgid "Unknown action should be performed.\n" msgstr "" #: warnquota.c:59 msgid "" "Hi,\n" "\n" "We noticed that you are in violation with the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" #: warnquota.c:61 #, c-format msgid "" "\n" "We hope that you will cleanup before your grace period expires.\n" "\n" "Basically, this means that the system thinks you are using more disk space\n" "on the above partition(s) than you are allowed. If you do not delete files\n" "and get below your quota before the grace period expires, the system will\n" "prevent you from creating new files.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" #: warnquota.c:68 #, c-format msgid "" "Hi,\n" "\n" "We noticed that the group %s you are member of violates the quotasystem\n" "used on this system. We have found the following violations:\n" "\n" msgstr "" #: warnquota.c:70 #, c-format msgid "" "\n" "Please cleanup the group data before the grace period expires.\n" "\n" "Basically, this means that the system thinks group is using more disk space\n" "on the above partition(s) than it is allowed. If you do not delete files\n" "and get below group quota before the grace period expires, the system will\n" "prevent you and other members of the group from creating new files owned by\n" "the group.\n" "\n" "For additional assistance, please contact us at %s\n" "or via phone at %s.\n" msgstr "" #: warnquota.c:195 #, c-format msgid "Additional error info: %s\n" msgstr "" #: warnquota.c:209 msgid "ldap_initialize() failed" msgstr "" #: warnquota.c:218 msgid "ldap_start_tls_s() failed" msgstr "" #: warnquota.c:224 msgid "ldap_sasl_bind_s() failed" msgstr "" #: warnquota.c:239 #, c-format msgid "Cannot get name for uid/gid %u.\n" msgstr "" #: warnquota.c:323 #, c-format msgid "Cannot create pipe: %s\n" msgstr "" #: warnquota.c:329 #, c-format msgid "Cannot fork: %s\n" msgstr "" #: warnquota.c:334 #, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "" #: warnquota.c:338 #, c-format msgid "Cannot execute '%s': %s\n" msgstr "" #: warnquota.c:343 #, c-format msgid "Cannot open pipe: %s\n" msgstr "" #: warnquota.c:421 msgid "Could not setup ldap connection.\n" msgstr "" #: warnquota.c:438 #, c-format msgid "" "Could not format LDAP search filter for %s user and %s search attribute due " "to excessive length.\n" msgstr "" #: warnquota.c:449 #, c-format msgid "Error with %s.\n" msgstr "" #: warnquota.c:450 msgid "ldap_search_ext_s() failed" msgstr "" #: warnquota.c:456 #, c-format msgid "Multiple entries found for client %s (%d).\n" msgstr "" #: warnquota.c:460 #, c-format msgid "Entry not found for client %s.\n" msgstr "" #: warnquota.c:470 #, c-format msgid "Could not get values for %s.\n" msgstr "" #: warnquota.c:516 #, c-format msgid "Administrator for a group %s not found. Cancelling mail.\n" msgstr "" #: warnquota.c:568 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" #: warnquota.c:569 #, c-format msgid "" "Filesystem used soft hard grace used soft hard grace\n" msgstr "" #: warnquota.c:609 #, c-format msgid "Cannot wait for mailer: %s\n" msgstr "" #: warnquota.c:611 msgid "Warning: Mailer exitted abnormally.\n" msgstr "" #: warnquota.c:668 #, c-format msgid "" "Cannot open %s: %s\n" "Will use device names.\n" msgstr "" #: warnquota.c:691 #, c-format msgid "Cannot parse line %d in quotatab (missing ':')\n" msgstr "" #: warnquota.c:705 #, c-format msgid "Cannot stat device %s (maybe typo in quotatab)\n" msgstr "" #: warnquota.c:725 #, c-format msgid "" "Incorrect format string for variable %s.\n" "Unrecognized expression %%%c.\n" msgstr "" #: warnquota.c:739 msgid "Ignoring error in config file.\n" msgstr "" #: warnquota.c:741 msgid "" "Aborting. Use option -I if you want warnquota to ignore errors in the config " "file as it used to in older versions.\n" msgstr "" #: warnquota.c:786 #, c-format msgid "Cannot open %s: %s\n" msgstr "" #: warnquota.c:808 #, c-format msgid "line %d: Line too long! Maximum is %d.\n" msgstr "" #: warnquota.c:881 #, c-format msgid "Cannot parse time at CC_BEFORE variable (line %d).\n" msgstr "" #: warnquota.c:941 #, c-format msgid "" "line %d: LDAP variable in config file but LDAP support is not compiled.\n" msgstr "" #: warnquota.c:949 #, c-format msgid "line %d: Unknown variable %s in config file.\n" msgstr "" #: warnquota.c:957 #, c-format msgid "line %d: Missing '=' in config file.\n" msgstr "" #: warnquota.c:964 #, c-format msgid "line %d: Unterminated last line.\n" msgstr "" #: warnquota.c:975 #, c-format msgid "Could not format LDAP URI because it's longer than %d bytes.\n" msgstr "" #: warnquota.c:980 #, c-format msgid "" "LDAP library version >= 2.3 detected. Please use LDAP_URI instead of " "hostname and port.\n" "Generated URI %s\n" msgstr "" #: warnquota.c:1002 #, c-format msgid "Cannot open file with group administrators: %s\n" msgstr "" #: warnquota.c:1017 #, c-format msgid "Parse error at line %d. Cannot find end of group name.\n" msgstr "" #: warnquota.c:1026 #, c-format msgid "Parse error at line %d. Cannot find administrators name.\n" msgstr "" #: warnquota.c:1036 #, c-format msgid "" "Parse error at line %d. Trailing characters after administrators name.\n" msgstr "" #: warnquota.c:1099 msgid "" "Usage:\n" " warnquota [-ugsid] [-F quotaformat] [-c configfile] [-q quotatabfile] [-a " "adminsfile] [filesystem...]\n" "\n" "-u, --user warn users\n" "-g, --group warn groups\n" "-s, --human-readable[=units] display numbers in human friendly units " "(MB,\n" " GB, ...). Units can be also specified\n" " explicitely by an optional argument in " "format\n" " [kgt],[kgt] where the first character " "specifies\n" " space units and the second character " "specifies\n" " inode units\n" "-i, --no-autofs avoid autofs mountpoints\n" "-d, --no-details do not send quota information itself\n" "-F, --format=formatname use quotafiles of specific format\n" "-c, --config=config-file non-default config file\n" "-q, --quota-tab=quotatab-file non-default quotatab\n" "-a, --admins-file=admins-file non-default admins file\n" "-I, --ignore-config-errors\tignore unknown statements in config file\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: warnquota.c:1174 repquota.c:134 quota.c:350 #, c-format msgid "Bad output format units for human readable output: %s\n" msgstr "" #: warnquota.c:1194 #, c-format msgid "Cannot get host name: %s\n" msgstr "" #: quotacheck.c:92 msgid "Not enough memory.\n" msgstr "" #: quotacheck.c:124 #, c-format msgid "Adding hardlink for inode %llu\n" msgstr "" #: quotacheck.c:167 #, c-format msgid "Adding dquot structure type %s for %d\n" msgstr "" #: quotacheck.c:253 #, c-format msgid "Cannot open file %s: %s\n" msgstr "" #: quotacheck.c:258 msgid "Cannot get exact used space... Results might be inaccurate.\n" msgstr "" #: quotacheck.c:296 #, c-format msgid "" "Utility for checking and repairing quota files.\n" "%s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a\n" "\n" "-u, --user check user files\n" "-g, --group check group files\n" "-c, --create-files create new quota files\n" "-b, --backup create backups of old quota files\n" "-f, --force force check even if quotas are enabled\n" "-i, --interactive interactive mode\n" "-n, --use-first-dquot use the first copy of duplicated structure\n" "-v, --verbose print more information\n" "-d, --debug print even more messages\n" "-m, --no-remount do not remount filesystem read-only\n" "-M, --try-remount try remounting filesystem read-only,\n" " continue even if it fails\n" "-R, --exclude-root exclude root when checking all filesystems\n" "-F, --format=formatname check quota files of specific format\n" "-a, --all check all filesystems\n" "-h, --help display this message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: quotacheck.c:427 #, c-format msgid "error (%d) while opening %s\n" msgstr "" #: quotacheck.c:432 #, c-format msgid "error (%d) while allocating file inode bitmap\n" msgstr "" #: quotacheck.c:437 #, c-format msgid "errstr (%d) while allocating directory inode bitmap\n" msgstr "" #: quotacheck.c:442 #, c-format msgid "error (%d) while opening inode scan\n" msgstr "" #: quotacheck.c:447 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "" #: quotacheck.c:455 #, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "" #: quotacheck.c:461 msgid "High uid detected.\n" msgstr "" #: quotacheck.c:477 #, c-format msgid "Something weird happened while scanning. Error %d\n" msgstr "" #: quotacheck.c:510 #, c-format msgid "Cannot stat directory %s: %s\n" msgstr "" #: quotacheck.c:522 #, c-format msgid "Cannot chdir to %s: %s\n" msgstr "" #: quotacheck.c:527 #, c-format msgid "" "\n" "Cannot open directory %s: %s\n" msgstr "" #: quotacheck.c:539 #, c-format msgid "" "lstat: Cannot stat `%s/%s': %s\n" "Guess you'd better run fsck first !\n" "exiting...\n" msgstr "" #: quotacheck.c:551 #, c-format msgid "pushd %s/%s\n" msgstr "" #: quotacheck.c:567 #, c-format msgid "\tAdding %s size %lld ino %d links %d uid %u gid %u\n" msgstr "" #: quotacheck.c:577 msgid "Scanning stored directories from directory stack\n" msgstr "" #: quotacheck.c:581 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" #: quotacheck.c:593 #, c-format msgid "Leaving %s\n" msgstr "" #: quotacheck.c:633 #, c-format msgid "Going to check %s quota file of %s\n" msgstr "" #: quotacheck.c:639 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" msgstr "" #: quotacheck.c:640 quotacheck.c:966 msgid "Should I continue?" msgstr "" #: quotacheck.c:641 quotacheck.c:967 #, c-format msgid "As you wish... Canceling check of this file.\n" msgstr "" #: quotacheck.c:646 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" "Please turn quotas off or use -f to force checking.\n" msgstr "" #: quotacheck.c:653 #, c-format msgid "Error while syncing quotas on %s: %s\n" msgstr "" #: quotacheck.c:658 #, c-format msgid "Cannot get quotafile name for %s\n" msgstr "" #: quotacheck.c:663 quotaio.c:151 quotasys.c:844 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "" #: quotacheck.c:702 msgid "Renaming new files to proper names.\n" msgstr "" #: quotacheck.c:704 #, c-format msgid "Cannot get name of old quotafile on %s.\n" msgstr "" #: quotacheck.c:707 msgid "Old file not found.\n" msgstr "" #: quotacheck.c:710 #, c-format msgid "Error while searching for old quota file %s: %s\n" msgstr "" #: quotacheck.c:719 msgid "Old file found removed during check!\n" msgstr "" #: quotacheck.c:722 #, c-format msgid "Error while opening old quota file %s: %s\n" msgstr "" #: quotacheck.c:728 #, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "" #: quotacheck.c:732 #, c-format msgid "Quota file %s has IMMUTABLE flag set. Clearing.\n" msgstr "" #: quotacheck.c:735 #, c-format msgid "Failed to remove IMMUTABLE flag from quota file %s: %s\n" msgstr "" #: quotacheck.c:744 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "" #: quotacheck.c:750 #, c-format msgid "Name of quota file too long. Contact %s.\n" msgstr "" #: quotacheck.c:752 #, c-format msgid "Cannot rename old quotafile %s to %s: %s\n" msgstr "" #: quotacheck.c:758 msgid "Renaming new quotafile\n" msgstr "" #: quotacheck.c:770 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "" #: quotacheck.c:777 #, c-format msgid "Cannot open new quota file %s: %s\n" msgstr "" #: quotacheck.c:782 #, c-format msgid "Warning: Cannot set EXT2 flags on %s: %s\n" msgstr "" #: quotacheck.c:802 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "" #: quotacheck.c:805 #, c-format msgid "Cannot initialize IO on xfs/gfs2 quotafile: %s\n" msgstr "" #: quotacheck.c:811 #, c-format msgid "Cannot initialize IO on new quotafile: %s\n" msgstr "" #: quotacheck.c:838 #, c-format msgid "Cannot finish IO on new quotafile: %s\n" msgstr "" #: quotacheck.c:841 msgid "Data dumped.\n" msgstr "" #: quotacheck.c:849 #, c-format msgid "Cannot find checked quota file for %ss on %s!\n" msgstr "" #: quotacheck.c:853 #, c-format msgid "" "Cannot turn %s quotas off on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" #: quotacheck.c:866 #, c-format msgid "" "Cannot turn %s quotas on on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" #: quotacheck.c:892 #, c-format msgid "Substracting space used by old %s quota file.\n" msgstr "" #: quotacheck.c:894 #, c-format msgid "" "Old %s file name could not been determined. Usage will not be subtracted.\n" msgstr "" #: quotacheck.c:899 #, c-format msgid "Cannot stat old %s quota file %s: %s. Usage will not be subtracted.\n" msgstr "" #: quotacheck.c:911 #, c-format msgid "" "Quota structure for %s owning quota file not present! Something is really " "wrong...\n" msgstr "" #: quotacheck.c:916 #, c-format msgid "Substracted %lu bytes.\n" msgstr "" #: quotacheck.c:930 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "" #: quotacheck.c:932 #, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "" #: quotacheck.c:965 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only. Counted values might not " "be right.\n" msgstr "" #: quotacheck.c:973 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only so counted values might " "not be right.\n" "Please stop all programs writing to filesystem or use -m flag to force " "checking.\n" msgstr "" #: quotacheck.c:981 msgid "Filesystem remounted read-only\n" msgstr "" #: quotacheck.c:984 #, c-format msgid "Scanning %s [%s] " msgstr "" #: quotacheck.c:1010 msgid "done\n" msgstr "" #: quotacheck.c:1019 #, c-format msgid "Checked %d directories and %d files\n" msgstr "" #: quotacheck.c:1023 #, c-format msgid "" "Cannot remount filesystem %s read-write. cannot write new quota files.\n" msgstr "" #: quotacheck.c:1024 msgid "Filesystem remounted RW.\n" msgstr "" #: quotacheck.c:1068 #, c-format msgid "Cannot find quota option on filesystem %s with quotas!\n" msgstr "" #: quotacheck.c:1074 #, c-format msgid "Cannot detect quota format for journalled quota on %s\n" msgstr "" #: quotacheck.c:1140 quotasys.c:1610 #, c-format msgid "Cannot get system info: %s\n" msgstr "" #: quotacheck.c:1171 quotasys.c:934 msgid "Cannot initialize mountpoint scan.\n" msgstr "" #: quotacheck.c:1176 #, c-format msgid "Skipping %s [%s]\n" msgstr "" #: quotacheck.c:1193 #, c-format msgid "" "Cannot guess format from filename on %s. Please specify format on " "commandline.\n" msgstr "" #: quotacheck.c:1198 #, c-format msgid "Detected quota format %s\n" msgstr "" #: quotacheck.c:1205 quotaon.c:276 msgid "" "Your kernel probably supports ext4 quota feature but you are using external " "quota files. Please switch your filesystem to use ext4 quota feature as " "external quota files on ext4 are deprecated. You can enable the feature by " "unmounting the file system and running 'tune2fs -O quota <device>'.\n" msgstr "" #: quotacheck.c:1223 msgid "" "Your kernel probably supports journaled quota but you are not using it. " "Consider switching to journaled quota to avoid running quotacheck after an " "unclean shutdown.\n" msgstr "" #: quotacheck.c:1236 msgid "" "Cannot find filesystem to check or filesystem not mounted with quota " "option.\n" msgstr "" #: quotacheck.c:1254 #, c-format msgid "" "Allocated %d bytes memory\n" "Free'd %d bytes\n" "Lost %d bytes\n" msgstr "" #: quotasync.c:29 #, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ugP] mount-point...\n" " or: %1$s [-ugP] -a\n" " or: %1$s -h | -V\n" "\n" msgstr "" #: quotasync.c:36 #, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group quotas\n" "-P, --project synchronize project quotas\n" "-a, --all synchronize quotas for all mounted file systems\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: quotasync.c:45 #, c-format msgid "Report bugs to <%s>.\n" msgstr "" #: quotasync.c:113 #, c-format msgid "%s quota sync failed: %s\n" msgstr "" #: quotasync.c:126 #, c-format msgid "%s quota sync failed for %s: %s\n" msgstr "" #: quota.h:22 msgid "user" msgstr "" #: quota.h:23 msgid "group" msgstr "" #: quota.h:24 msgid "project" msgstr "" #: quota.h:25 msgid "undefined" msgstr "" #: quota_nld.c:85 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -C --no-console do not try to write messages to console\n" " -b --print-below write to console also information about getting below " "hard/soft limits\n" " -D --no-dbus do not try to write messages to DBUS\n" " -F --foreground run daemon in foreground\n" msgstr "" #: quota_nld.c:119 rquota_svc.c:158 #, c-format msgid "Unknown option '%c'.\n" msgstr "" #: quota_nld.c:125 msgid "No possible destination for messages. Nothing to do.\n" msgstr "" #: quota_nld.c:151 msgid "Error parsing netlink message.\n" msgstr "" #: quota_nld.c:158 msgid "" "Unknown format of kernel netlink message!\n" "Maybe your quota tools are too old?\n" msgstr "" #: quota_nld.c:182 msgid "Cannot allocate netlink socket!\n" msgstr "" #: quota_nld.c:188 #, c-format msgid "Cannot register callback for netlink messages: %s\n" msgstr "" #: quota_nld.c:193 #, c-format msgid "Cannot connect to netlink socket: %s\n" msgstr "" #: quota_nld.c:205 #, c-format msgid "Cannot resolve quota netlink name: %s\n" msgstr "" #: quota_nld.c:211 #, c-format msgid "Cannot join quota multicast group: %s\n" msgstr "" #: quota_nld.c:224 #, c-format msgid "Cannot connect to system DBUS: %s\n" msgstr "" #: quota_nld.c:292 #, c-format msgid "Failed to find tty of user %llu to report warning to.\n" msgstr "" #: quota_nld.c:297 #, c-format msgid "Failed to open tty %s of user %llu to report warning.\n" msgstr "" #: quota_nld.c:303 msgid "Warning" msgstr "" #: quota_nld.c:306 msgid "Error" msgstr "" #: quota_nld.c:308 msgid "Info" msgstr "" #: quota_nld.c:311 msgid "file limit reached" msgstr "" #: quota_nld.c:314 msgid "file quota exceeded too long" msgstr "" #: quota_nld.c:317 msgid "file quota exceeded" msgstr "" #: quota_nld.c:320 msgid "block limit reached" msgstr "" #: quota_nld.c:323 msgid "block quota exceeded too long" msgstr "" #: quota_nld.c:326 msgid "block quota exceeded" msgstr "" #: quota_nld.c:329 msgid "got below file limit" msgstr "" #: quota_nld.c:332 msgid "got below file quota" msgstr "" #: quota_nld.c:335 msgid "got below block limit" msgstr "" #: quota_nld.c:338 msgid "got below block quota" msgstr "" #: quota_nld.c:341 msgid "unknown quota warning" msgstr "" #: quota_nld.c:345 #, c-format msgid "Failed to write quota message for user %llu to %s: %s\n" msgstr "" #: quota_nld.c:358 msgid "Cannot create DBUS message: No enough memory.\n" msgstr "" #: quota_nld.c:376 msgid "Failed to write message to dbus: No enough memory.\n" msgstr "" #: quota_nld.c:392 #, c-format msgid "Failed to read or parse quota netlink message: %s\n" msgstr "" #: quota_nld.c:403 msgid "Undefined program name.\n" msgstr "" #: quota_nld.c:408 msgid "Not enough memory to build PID file name.\n" msgstr "" #: quota_nld.c:427 #, c-format msgid "Could not open PID file '%s': %s\n" msgstr "" #: quota_nld.c:433 #, c-format msgid "Could not write daemon's PID into '%s'.\n" msgstr "" #: quota_nld.c:440 #, c-format msgid "Could not close PID file '%s'.\n" msgstr "" #: quota_nld.c:470 msgid "Could not register PID file removal on SIGTERM.\n" msgstr "" #: quota_nld.c:472 #, c-format msgid "Could not store my PID %jd.\n" msgstr "" #: quota_nld.c:489 rquota_svc.c:537 #, c-format msgid "Failed to daemonize: %s\n" msgstr "" #: repquota.c:51 #, c-format msgid "" "Utility for reporting quotas.\n" "Usage:\n" "%s [-vugsi] [-c|C] [-t|n] [-F quotaformat] [-O (default | xml | csv)] (-a | " "mntpoint)\n" "\n" "-v, --verbose display also users/groups without any usage\n" "-u, --user display information about users\n" "-g, --group display information about groups\n" "-P, --project display information about projects\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" "-t, --truncate-names truncate names to 9 characters\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-n, --no-names do not translate uid/gid to name\n" "-i, --no-autofs avoid autofs mountpoints\n" "-c, --cache translate big number of ids at once\n" "-C, --no-cache translate ids one by one\n" "-F, --format=formatname report information for specific format\n" "-O, --output=format format output as xml or csv\n" "-a, --all report information for all mount points with\n" " quotas\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: repquota.c:167 msgid "Repquota cannot report through RPC calls.\n" msgstr "" #: repquota.c:171 msgid "Specified both -n and -t but only one of them can be used.\n" msgstr "" #: repquota.c:375 msgid "User" msgstr "" #: repquota.c:377 msgid "Group" msgstr "" #: repquota.c:379 msgid "Project" msgstr "" #: repquota.c:382 #, c-format msgid "*** Report for %s quotas on device %s\n" msgstr "" #: repquota.c:391 msgid "Space" msgstr "" #: repquota.c:393 msgid "Block" msgstr "" #: repquota.c:394 #, c-format msgid "Block grace time: %s; Inode grace time: %s\n" msgstr "" #: repquota.c:395 #, c-format msgid " %s limits File limits\n" msgstr "" #: repquota.c:396 #, c-format msgid "%-9s used soft hard grace used soft hard grace\n" msgstr "" #: quotacheck_v1.c:32 #, c-format msgid "Cannot read entry for id %u from quotafile %s: %s\n" msgstr "" #: quotacheck_v1.c:35 #, c-format msgid "Entry for id %u is truncated.\n" msgstr "" #: quotacheck_v1.c:64 msgid "Loading first quota entry with grace times.\n" msgstr "" #: quotacheck_v1.c:68 #, c-format msgid "Cannot read first entry from quotafile %s: %s\n" msgstr "" #: quotacheck_v1.c:72 #, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" #: quotacheck_v1.c:78 msgid "First entry loaded.\n" msgstr "" #: quotacheck_v2.c:55 msgid "Checking quotafile info...\n" msgstr "" #: quotacheck_v2.c:60 #, c-format msgid "Cannot read info from quota file %s: %s\n" msgstr "" #: quotacheck_v2.c:65 #, c-format msgid "" "WARNING - Quota file %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" #: quotacheck_v2.c:77 msgid "WARNING - Quota file info was corrupted.\n" msgstr "" #: quotacheck_v2.c:78 #, c-format msgid "" "Size of file: %lu\n" "Blocks: %u Free block: %u Block with free entry: %u Flags: %x\n" msgstr "" #: quotacheck_v2.c:85 #, c-format msgid "" "Setting grace times and other flags to default values.\n" "Assuming number of blocks is %u.\n" msgstr "" #: quotacheck_v2.c:102 msgid "File info done.\n" msgstr "" #: quotacheck_v2.c:113 msgid "Corrupted blocks: " msgstr "" #: quotacheck_v2.c:117 #, c-format msgid "Block %u: " msgstr "" #: quotacheck_v2.c:179 msgid "Duplicated entries." msgstr "" #: quotacheck_v2.c:183 #, c-format msgid "" "Found more structures for ID %u. Using values: BHARD: %lld BSOFT: %lld " "IHARD: %lld ISOFT: %lld\n" msgstr "" #: quotacheck_v2.c:191 #, c-format msgid "" "Found more structures for ID %u. Values: BHARD: %lld/%lld BSOFT: %lld/%lld " "IHARD: %lld/%lld ISOFT: %lld/%lld\n" msgstr "" #: quotacheck_v2.c:196 msgid "Should I use new values?" msgstr "" #: quotacheck_v2.c:206 #, c-format msgid "" "ID %u has more structures. User intervention needed (use -i for interactive " "mode or -n for automatic answer).\n" msgstr "" #: quotacheck_v2.c:243 #, c-format msgid "Block %u is truncated.\n" msgstr "" #: quotacheck_v2.c:252 #, c-format msgid "Reference to illegal block %u" msgstr "" #: quotacheck_v2.c:259 #, c-format msgid "Block %u in tree referenced twice" msgstr "" #: quotacheck_v2.c:275 #, c-format msgid "Illegal free block reference to block %u" msgstr "" #: quotacheck_v2.c:278 #, c-format msgid "Corrupted number of used entries (%u)" msgstr "" #: quotacheck_v2.c:330 #, c-format msgid "" "Quota file %s has corrupted headers. You have to specify quota format on " "command line.\n" msgstr "" #: quotacheck_v2.c:346 msgid "Checking quotafile headers...\n" msgstr "" #: quotacheck_v2.c:350 #, c-format msgid "Cannot read header from quotafile %s: %s\n" msgstr "" #: quotacheck_v2.c:352 #, c-format msgid "" "WARNING - Quotafile %s was probably truncated. Cannot save quota " "settings...\n" msgstr "" #: quotacheck_v2.c:358 #, c-format msgid "WARNING - Quota file %s has corrupted headers\n" msgstr "" #: quotacheck_v2.c:361 msgid "Continue checking assuming format from command line?" msgstr "" #: quotacheck_v2.c:365 #, c-format msgid "" "Quota file format version %d does not match the one specified on command " "line (%d). Quota file header may be corrupted.\n" msgstr "" #: quotacheck_v2.c:370 msgid "Continue checking assuming version from command line?" msgstr "" #: quotacheck_v2.c:376 msgid "Headers checked.\n" msgstr "" #: quotacheck_v2.c:392 #, c-format msgid "Do not know how to buffer format %d\n" msgstr "" #: quotacheck_v2.c:402 #, c-format msgid "Headers of file %s checked. Going to load data...\n" msgstr "" #: quotacheck_v2.c:410 msgid "Cannot gather quota data. Tree root node corrupted.\n" msgstr "" #: quotacheck_v2.c:418 msgid "WARNING - Some data might be changed due to corruption.\n" msgstr "" #: quotacheck_v2.c:421 msgid "Not found any corrupted blocks. Congratulations.\n" msgstr "" #: quotaio.c:62 msgid "Only RPC quota format is allowed on NFS filesystem.\n" msgstr "" #: quotaio.c:73 msgid "RPC quota format not compiled.\n" msgstr "" #: quotaio.c:77 msgid "RPC quota format specified for non-NFS filesystem.\n" msgstr "" #: quotaio.c:85 msgid "Only XFS quota format is allowed on XFS filesystem.\n" msgstr "" #: quotaio.c:96 msgid "XFS quota allowed only on XFS filesystem.\n" msgstr "" #: quotaio.c:110 msgid "Quota not supported by the filesystem.\n" msgstr "" #: quotaio.c:130 msgid "Cannot find any quota file to work on.\n" msgstr "" #: quotaio.c:135 msgid "Quota file not found or has wrong format.\n" msgstr "" #: quotaio.c:145 #, c-format msgid "Cannot sync quotas on device %s: %s\n" msgstr "" #: quotaio.c:176 #, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "" #: quotaio.c:203 #, c-format msgid "Creation of %s quota format is not supported.\n" msgstr "" #: quotaio.c:213 #, c-format msgid "" "Quota on %s is stored in system files and must be manipulated by fs tools.\n" msgstr "" #: quotaio.c:223 #, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "" #: quotaio.c:297 #, c-format msgid "" "Trying to set quota limits out of range supported by quota format on %s.\n" msgstr "" #: quotaio.c:303 #, c-format msgid "" "Trying to set quota usage out of range supported by quota format on %s.\n" msgstr "" #: quotaio_generic.c:54 #, c-format msgid "Cannot get info for %s quota file from kernel on %s: %s\n" msgstr "" #: quotaio_generic.c:72 #, c-format msgid "Cannot set info for %s quota file from kernel on %s: %s\n" msgstr "" #: quotaio_generic.c:84 #, c-format msgid "Cannot get quota for %s %d from kernel on %s: %s\n" msgstr "" #: quotaio_generic.c:99 #, c-format msgid "Cannot set quota for %s %d from kernel on %s: %s\n" msgstr "" #: quotaio_meta.c:23 msgid "Metadata init_io called when kernel support is not enabled.\n" msgstr "" #: quotaio_meta.c:27 msgid "" "Metadata init_io called when kernel does not support generic quota " "interface!\n" msgstr "" #: quotaio_rpc.c:77 quotaio_v1.c:278 quotaio_v2.c:464 #, c-format msgid "Trying to write quota to readonly quotafile on %s\n" msgstr "" #: quotaio_tree.c:71 #, c-format msgid "Cannot write block (%u): %s\n" msgstr "" #: quotaio_tree.c:94 msgid "Cannot allocate new quota block (out of disk space).\n" msgstr "" #: quotaio_tree.c:202 msgid "find_free_dqentry(): Data block full but it shouldn't.\n" msgstr "" #: quotaio_tree.c:237 #, c-format msgid "Inserting already present quota entry (block %u).\n" msgstr "" #: quotaio_tree.c:260 #, c-format msgid "Cannot write quota (id %u): %s\n" msgstr "" #: quotaio_tree.c:279 #, c-format msgid "Quota write failed (id %u): %s\n" msgstr "" #: quotaio_tree.c:291 #, c-format msgid "Quota structure has offset to other block (%u) than it should (%u).\n" msgstr "" #: quotaio_tree.c:367 #, c-format msgid "Quota for id %u referenced but not present.\n" msgstr "" #: quotaio_tree.c:426 #, c-format msgid "Cannot read quota structure for id %u: %s\n" msgstr "" #: quotaio_tree.c:468 #, c-format msgid "" "Illegal reference (%u >= %u) in %s quota file on %s. Quota file is probably " "corrupted.\n" "Please run quotacheck(8) and try again.\n" msgstr "" #: quotaio_v1.c:184 #, c-format msgid "Trying to write info to readonly quotafile on %s.\n" msgstr "" #: quotaio_v2.c:255 msgid "" "Your quota file is stored in wrong endianity. Please use convertquota(8) to " "convert it.\n" msgstr "" #: quotaio_v2.c:388 #, c-format msgid "Trying to write info to readonly quotafile on %s\n" msgstr "" #: quotaio_v2.c:518 #, c-format msgid "" "Statistics:\n" "Total blocks: %u\n" "Data blocks: %u\n" "Entries: %u\n" "Used average: %f\n" msgstr "" #: quotaio_xfs.c:53 msgid "Truncating kernel returned time stamp." msgstr "" #: quotaio_xfs.c:311 #, c-format msgid "*** Status for %s quotas on device %s\n" msgstr "" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "ON" msgstr "" #: quotaio_xfs.c:313 quotaio_xfs.c:332 msgid "OFF" msgstr "" #: quotaio_xfs.c:315 quotaio_xfs.c:319 quotaio_xfs.c:323 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "" #: quotaio_xfs.c:335 quotaio_xfs.c:339 quotaio_xfs.c:343 #, c-format msgid "Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n" msgstr "" #: quotaio_xfs.c:352 quotaio_xfs.c:361 quotaio_xfs.c:374 #, c-format msgid "Inode: none\n" msgstr "" #: quotaio_xfs.c:354 quotaio_xfs.c:363 quotaio_xfs.c:376 #, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "" #: quotaon.c:37 #, c-format msgid "" "Usage:\n" "\t%s [-guPvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guPvp] [-F quotaformat] [-x state] filesys ...\n" "\n" "-a, --all %s\n" "-f, --off turn quotas off\n" "-u, --user operate on user quotas\n" "-g, --group operate on group quotas\n" "-P, --project operate on project quotas\n" "-p, --print-state print whether quotas are on or off\n" "-x, --xfs-command=cmd perform XFS quota command\n" "-F, --format=formatname operate on specific quota format\n" "-v, --verbose print more messages\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" msgstr "" #: quotaon.c:51 msgid "turn quotas off for all filesystems" msgstr "" #: quotaon.c:52 msgid "turn quotas on for all filesystems" msgstr "" #: quotaon.c:117 msgid "Cannot turn on/off quotas via RPC.\n" msgstr "" #: quotaon.c:164 #, c-format msgid "set root_squash on %s: %s\n" msgstr "" #: quotaon.c:168 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "" #: quotaon.c:170 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "" #: quotaon.c:188 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "" #: quotaon.c:191 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "" #: quotaon.c:204 #, c-format msgid "cannot find %s on %s [%s]\n" msgstr "" #: quotaon.c:206 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "" #: quotaon.c:208 msgid "Maybe create new quota files with quotacheck(8)?\n" msgstr "" #: quotaon.c:210 msgid "Quota format not supported in kernel.\n" msgstr "" #: quotaon.c:213 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "" #: quotaon.c:254 msgid "Cannot change state of GFS2 quota.\n" msgstr "" #: quotaon.c:259 msgid "Cannot change state of XFS quota. It's not compiled in kernel.\n" msgstr "" #: quotaon.c:295 #, c-format msgid "Cannot find quota file on %s [%s] to turn quotas on/off.\n" msgstr "" #: quotaon.c:300 #, c-format msgid "Quota file on %s [%s] does not exist or has wrong format.\n" msgstr "" #: quotaon.c:330 quotaon.c:346 msgid "off" msgstr "" #: quotaon.c:332 msgid "on (accounting)" msgstr "" #: quotaon.c:334 msgid "on (enforced)" msgstr "" #: quotaon.c:346 msgid "on" msgstr "" #: quotaon.c:348 #, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "" #: quotaon.c:365 #, c-format msgid "Name must be quotaon or quotaoff not %s\n" msgstr "" #: quotaon.c:371 #, c-format msgid "Required format %s not supported by kernel.\n" msgstr "" #: quotaon.c:373 msgid "Warning: No quota format detected in the kernel.\n" msgstr "" #: quotaon.c:380 #, c-format msgid "%s: Quota cannot be turned on on NFS filesystem\n" msgstr "" #: quotaon_xfs.c:36 #, c-format msgid "quotactl() on %s: %s\n" msgstr "" #: quotaon_xfs.c:68 quotaon_xfs.c:88 #, c-format msgid "Enabling %s quota on root filesystem (reboot to take effect)\n" msgstr "" #: quotaon_xfs.c:72 #, c-format msgid "Enable XFS %s quota accounting during mount\n" msgstr "" #: quotaon_xfs.c:82 #, c-format msgid "Cannot delete %s quota on %s - switch quota accounting off first\n" msgstr "" #: quotaon_xfs.c:95 #, c-format msgid "Enabling %s quota enforcement on %s\n" msgstr "" #: quotaon_xfs.c:98 #, c-format msgid "Already accounting %s quota on %s\n" msgstr "" #: quotaon_xfs.c:105 #, c-format msgid "Disabling %s quota accounting on %s\n" msgstr "" #: quotaon_xfs.c:109 #, c-format msgid "Quota enforcement already disabled for %s on %s\n" msgstr "" #: quotaon_xfs.c:118 #, c-format msgid "" "Cannot delete %s quota on %s - switch quota enforcement and accounting off " "first\n" msgstr "" #: quotaon_xfs.c:123 #, c-format msgid "Enforcing %s quota already on %s\n" msgstr "" #: quotaon_xfs.c:130 #, c-format msgid "Cannot switch off %s quota accounting on %s when enforcement is on\n" msgstr "" #: quotaon_xfs.c:138 msgid "and accounting " msgstr "" #: quotaon_xfs.c:139 #, c-format msgid "Disabling %s quota enforcement %son %s\n" msgstr "" #: quotaon_xfs.c:145 #, c-format msgid "Unexpected XFS quota state sought on %s\n" msgstr "" #: quotaon_xfs.c:160 #, c-format msgid "quotactl on %s: %s\n" msgstr "" #: quotaon_xfs.c:164 #, c-format msgid "%s: %s quotas turned off\n" msgstr "" #: quotaon_xfs.c:166 #, c-format msgid "%s: %s quotas turned on\n" msgstr "" #: quotaon_xfs.c:180 #, c-format msgid "Failed to delete quota: %s\n" msgstr "" #: quotaon_xfs.c:185 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "" #: quotaon_xfs.c:248 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "" #: quotaops.c:82 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "" #: quotaops.c:94 #, c-format msgid "%s (gid %d): gid set allocation (%d): %s\n" msgstr "" #: quotaops.c:105 #, c-format msgid "%s (gid %d): error while trying getgroups(): %s\n" msgstr "" #: quotaops.c:116 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "" #: quotaops.c:134 msgid "Cannot connect to RPC quota service" msgstr "" #: quotaops.c:136 msgid "Quota not enabled" msgstr "" #: quotaops.c:141 #, c-format msgid "error while getting quota from %s for %s (id %u): %s\n" msgstr "" #: quotaops.c:169 #, c-format msgid "Cannot write quota for %u on %s: %s\n" msgstr "" #: quotaops.c:204 quotaops.c:206 #, c-format msgid "%s failed: %s\n" msgstr "" #: quotaops.c:220 msgid "Too many parameters to editor.\n" msgstr "" #: quotaops.c:228 #, c-format msgid "Cannot exec %s\n" msgstr "" #: quotaops.c:245 #, c-format msgid "Cannot truncate a file: %s\n" msgstr "" #: quotaops.c:247 #, c-format msgid "Cannot reset a file offset: %s\n" msgstr "" #: quotaops.c:249 #, c-format msgid "Cannot duplicate a file descriptor: %s\n" msgstr "" #: quotaops.c:251 #, c-format msgid "Cannot open a stream to write to: %s\n" msgstr "" #: quotaops.c:252 #, c-format msgid "Cannot open a stream to read from: %s\n" msgstr "" #: quotaops.c:268 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "" #: quotaops.c:272 #, c-format msgid "" " Filesystem blocks soft hard inodes " "soft hard\n" msgstr "" #: quotaops.c:305 #, c-format msgid "WARNING - %s: cannot change current block allocation\n" msgstr "" #: quotaops.c:308 #, c-format msgid "WARNING - %s: cannot change current inode allocation\n" msgstr "" #: quotaops.c:334 msgid "Bad format: two title lines assumed\n" msgstr "" #: quotaops.c:345 #, c-format msgid "" "Bad format:\n" "%s\n" msgstr "" #: quotaops.c:351 #, c-format msgid "Bad block usage: %s: %s\n" msgstr "" #: quotaops.c:358 #, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "" #: quotaops.c:365 #, c-format msgid "Bad block hard limit: %s: %s\n" msgstr "" #: quotaops.c:372 #, c-format msgid "Bad inode usage: %s: %s\n" msgstr "" #: quotaops.c:379 #, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "" #: quotaops.c:386 #, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "" #: quotaops.c:439 #, c-format msgid "Times to enforce softlimit for %s %s (%cid %d):\n" msgstr "" #: quotaops.c:441 quotaops.c:544 #, c-format msgid "Time units may be: days, hours, minutes, or seconds\n" msgstr "" #: quotaops.c:443 #, c-format msgid "" " Filesystem block grace inode grace\n" msgstr "" #: quotaops.c:448 quotaops.c:454 quotaops.c:499 quotaops.c:512 setquota.c:288 #: setquota.c:294 msgid "unset" msgstr "" #: quotaops.c:450 quotaops.c:456 msgid "0seconds" msgstr "" #: quotaops.c:452 quotaops.c:458 quotasys.c:504 #, c-format msgid "%useconds" msgstr "" #: quotaops.c:485 quotaops.c:584 msgid "Bad format: three title lines assumed\n" msgstr "" #: quotaops.c:495 quotaops.c:592 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" #: quotaops.c:506 quotaops.c:598 msgid "Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n" msgstr "" #: quotaops.c:542 #, c-format msgid "Grace period before enforcing soft limits for %ss:\n" msgstr "" #: quotaops.c:545 #, c-format msgid " Filesystem Block grace period Inode grace period\n" msgstr "" #: quotastats.c:48 #, c-format msgid "Cannot read stat file %s: %s\n" msgstr "" #: quotastats.c:83 #, c-format msgid "Error while getting quota statistics from kernel: %s\n" msgstr "" #: quotastats.c:87 #, c-format msgid "Error while getting old quota statistics from kernel: %s\n" msgstr "" #: quotastats.c:101 #, c-format msgid "Kernel quota version: old\n" msgstr "" #: quotastats.c:103 #, c-format msgid "Kernel quota version: %u.%u.%u\n" msgstr "" #: quotastats.c:104 #, c-format msgid "Number of dquot lookups: %ld\n" msgstr "" #: quotastats.c:105 #, c-format msgid "Number of dquot drops: %ld\n" msgstr "" #: quotastats.c:106 #, c-format msgid "Number of dquot reads: %ld\n" msgstr "" #: quotastats.c:107 #, c-format msgid "Number of dquot writes: %ld\n" msgstr "" #: quotastats.c:108 #, c-format msgid "Number of quotafile syncs: %ld\n" msgstr "" #: quotastats.c:109 #, c-format msgid "Number of dquot cache hits: %ld\n" msgstr "" #: quotastats.c:110 #, c-format msgid "Number of allocated dquots: %ld\n" msgstr "" #: quotastats.c:111 #, c-format msgid "Number of free dquots: %ld\n" msgstr "" #: quotastats.c:112 #, c-format msgid "Number of in use dquot entries (user/group): %ld\n" msgstr "" #: setquota.c:59 #, c-format msgid "" "Usage:\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <user|group|project>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] <-p protouser|protogroup|" "protoproject> <user|group|project> -a|<filesystem>...\n" " setquota [-u|-g|-P] %1$s[-F quotaformat] -b [-c] -a|<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] -t <blockgrace> <inodegrace> -a|" "<filesystem>...\n" " setquota [-u|-g|-P] [-F quotaformat] <user|group|project> -T <blockgrace> " "<inodegrace> -a|<filesystem>...\n" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\n" "-P, --project set limits for project\n" "-a, --all set limits for all filesystems\n" " --always-resolve always try to resolve name, even if is\n" " composed only of digits\n" "-F, --format=formatname operate on specific quota format\n" "-p, --prototype=protoname copy limits from user/group/project\n" "-b, --batch read limits from standard input\n" "-c, --continue-batch continue in input processing in case of an error\n" msgstr "" #: setquota.c:77 msgid "" "-r, --remote set remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" #: setquota.c:80 msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group/project\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: setquota.c:84 edquota.c:73 quota.c:94 #, c-format msgid "Bugs to: %s\n" msgstr "" #: setquota.c:95 #, c-format msgid "%s: %s\n" msgstr "" #: setquota.c:108 setquota.c:121 #, c-format msgid "%s: %s: %s\n" msgstr "" #: setquota.c:229 msgid "Group/user/project quotas cannot be used together.\n" msgstr "" #: setquota.c:233 msgid "Prototype user has no sense when editing grace times.\n" msgstr "" #: setquota.c:237 msgid "Cannot set both individual and global grace time.\n" msgstr "" #: setquota.c:241 msgid "Batch mode cannot be used for setting grace times.\n" msgstr "" #: setquota.c:245 msgid "Batch mode and prototype user cannot be used together.\n" msgstr "" #: setquota.c:249 msgid "Cannot set grace times over RPC protocol.\n" msgstr "" #: setquota.c:272 msgid "Bad block softlimit" msgstr "" #: setquota.c:273 msgid "Bad block hardlimit" msgstr "" #: setquota.c:274 msgid "Bad inode softlimit" msgstr "" #: setquota.c:275 msgid "Bad inode hardlimit" msgstr "" #: setquota.c:281 setquota.c:293 msgid "Bad block grace time" msgstr "" #: setquota.c:282 setquota.c:299 msgid "Bad inode grace time" msgstr "" #: setquota.c:305 msgid "Mountpoint not specified.\n" msgstr "" #: setquota.c:319 setquota.c:450 setquota.c:493 msgid "Error getting quota information to update.\n" msgstr "" #: setquota.c:325 msgid "Error getting prototype quota information.\n" msgstr "" #: setquota.c:372 #, c-format msgid "Line %d too long.\n" msgstr "" #: setquota.c:384 #, c-format msgid "Cannot parse input line %d.\n" msgstr "" #: setquota.c:386 setquota.c:394 setquota.c:403 setquota.c:412 setquota.c:421 #: setquota.c:430 msgid "Exitting.\n" msgstr "" #: setquota.c:387 setquota.c:395 setquota.c:404 setquota.c:413 setquota.c:422 #: setquota.c:431 msgid "Skipping line.\n" msgstr "" #: setquota.c:392 #, c-format msgid "Unable to resolve name '%s' on line %d.\n" msgstr "" #: setquota.c:400 #, c-format msgid "Unable to parse block soft limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:409 #, c-format msgid "Unable to parse block hard limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:418 #, c-format msgid "Unable to parse inode soft limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:427 #, c-format msgid "Unable to parse inode hard limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:474 #, c-format msgid "Setting grace period on %s is not supported.\n" msgstr "" #: setquota.c:500 #, c-format msgid "Not setting block grace time on %s because softlimit is not exceeded.\n" msgstr "" #: setquota.c:504 #, c-format msgid "Not setting inode grace time on %s because softlimit is not exceeded.\n" msgstr "" #: setquota.c:515 #, c-format msgid "" "cannot write times for %s. Maybe kernel does not support such operation?\n" msgstr "" #: quotasys.c:190 #, c-format msgid "user %s does not exist.\n" msgstr "" #: quotasys.c:219 #, c-format msgid "group %s does not exist.\n" msgstr "" #: quotasys.c:249 #, c-format msgid "project %s does not exist.\n" msgstr "" #: quotasys.c:371 #, c-format msgid "" "Unknown quota format: %s\n" "Supported formats are:\n" " vfsold - original quota format\n" " vfsv0 - standard quota format\n" " vfsv1 - quota format with 64-bit limits\n" " rpc - use RPC calls\n" " xfs - XFS quota format\n" msgstr "" #: quotasys.c:398 #, c-format msgid "" "Unknown output format: %s\n" "Supported formats are:\n" " default - default\n" " csv - comma-separated values\n" " xml - simple XML\n" msgstr "" #: quotasys.c:460 quota.c:282 msgid "none" msgstr "" #: quotasys.c:492 #, c-format msgid "%ddays" msgstr "" #: quotasys.c:494 #, c-format msgid "%02d:%02d" msgstr "" #: quotasys.c:506 #, c-format msgid "%uminutes" msgstr "" #: quotasys.c:508 #, c-format msgid "%uhours" msgstr "" #: quotasys.c:510 #, c-format msgid "%udays" msgstr "" #: quotasys.c:519 msgid "second" msgstr "" #: quotasys.c:519 msgid "seconds" msgstr "" #: quotasys.c:521 msgid "minute" msgstr "" #: quotasys.c:521 msgid "minutes" msgstr "" #: quotasys.c:523 msgid "hour" msgstr "" #: quotasys.c:523 msgid "hours" msgstr "" #: quotasys.c:525 msgid "day" msgstr "" #: quotasys.c:525 msgid "days" msgstr "" #: quotasys.c:583 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:585 msgid "K" msgstr "" #: quotasys.c:587 msgid "M" msgstr "" #: quotasys.c:589 msgid "G" msgstr "" #: quotasys.c:591 msgid "T" msgstr "" #: quotasys.c:594 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:598 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:651 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:655 msgid "k" msgstr "" #: quotasys.c:657 msgid "m" msgstr "" #: quotasys.c:659 msgid "g" msgstr "" #: quotasys.c:661 msgid "t" msgstr "" #: quotasys.c:664 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:668 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:827 #, c-format msgid "Cannot stat quota file %s: %s\n" msgstr "" #: quotasys.c:975 msgid "Not all specified mountpoints are using quota.\n" msgstr "" #: quotasys.c:989 #, c-format msgid "Error while releasing file on %s\n" msgstr "" #: quotasys.c:1048 #, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "" #: quotasys.c:1051 #, c-format msgid "Cannot set signal handler: %s\n" msgstr "" #: quotasys.c:1107 #, c-format msgid "Cannot reset signal handler: %s\n" msgstr "" #: quotasys.c:1262 msgid "Cannot open any file with mount points.\n" msgstr "" #: quotasys.c:1280 #, c-format msgid "Cannot get device name for %s\n" msgstr "" #: quotasys.c:1340 #, c-format msgid "Cannot resolve mountpoint path %s: %s\n" msgstr "" #: quotasys.c:1346 #, c-format msgid "Cannot statfs() %s: %s\n" msgstr "" #: quotasys.c:1358 #, c-format msgid "Cannot stat() mounted device %s: %s\n" msgstr "" #: quotasys.c:1363 #, c-format msgid "" "Device (%s) filesystem is mounted on unsupported device type. Skipping.\n" msgstr "" #: quotasys.c:1373 #, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "" #: quotasys.c:1442 #, c-format msgid "" "Cannot find a device with %s.\n" "Skipping...\n" msgstr "" #: quotasys.c:1446 #, c-format msgid "" "Cannot stat() a mountpoint with %s: %s\n" "Skipping...\n" msgstr "" #: quotasys.c:1454 #, c-format msgid "" "Cannot stat() given mountpoint %s: %s\n" "Skipping...\n" msgstr "" #: quotasys.c:1464 #, c-format msgid "Cannot find a filesystem mountpoint for directory %s\n" msgstr "" #: quotasys.c:1470 #, c-format msgid "Cannot resolve path %s: %s\n" msgstr "" #: quotasys.c:1481 #, c-format msgid "Cannot find mountpoint for device %s\n" msgstr "" #: quotasys.c:1487 #, c-format msgid "Specified path %s is not directory nor device.\n" msgstr "" #: quotasys.c:1495 msgid "No correct mountpoint specified.\n" msgstr "" #: quotasys.c:1550 #, c-format msgid "Mountpoint (or device) %s not found or has no quota enabled.\n" msgstr "" #: rquota_svc.c:86 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -s --no-setquota disables remote calls to setquota (default)\n" " -S --setquota enables remote calls to setquota\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" #: rquota_svc.c:97 #, c-format msgid "" "Usage: %s [options]\n" "Options are:\n" " -h --help shows this text\n" " -V --version shows version information\n" " -F --foreground starts the quota service in foreground\n" " -I --autofs do not ignore mountpoints mounted by automounter\n" " -p --port <port> listen on given port\n" " -x --xtab <path> set an alternative file with NFSD export table\n" msgstr "" #: rquota_svc.c:144 #, c-format msgid "Illegal port number: %s\n" msgstr "" #: rquota_svc.c:151 #, c-format msgid "Cannot access the specified xtab file %s: %s\n" msgstr "" #: rquota_svc.c:189 #, c-format msgid "unknown address family %u for RPC request\n" msgstr "" #: rquota_svc.c:195 #, c-format msgid "failed to translate address for RPC request: %s\n" msgstr "" #: rquota_svc.c:204 #, c-format msgid "host %s attempted to call setquota when disabled\n" msgstr "" #: rquota_svc.c:211 #, c-format msgid "host %s attempted to call setquota from port >= 1024\n" msgstr "" #: rquota_svc.c:226 #, c-format msgid "Denied access to host %s\n" msgstr "" #: rquota_svc.c:314 rquota_svc.c:400 msgid "unable to free arguments\n" msgstr "" #: rquota_svc.c:423 #, c-format msgid "" "Warning: Cannot open export table %s: %s\n" "Using '/' as a pseudofilesystem root.\n" msgstr "" #: rquota_svc.c:474 #, c-format msgid "Failed to access local netconfig database: %s\n" msgstr "" #: rquota_svc.c:483 #, c-format msgid "Failed to create %s service.\n" msgstr "" #: rquota_svc.c:488 #, c-format msgid "Unable to register (RQUOTAPROG, RQUOTAVERS, %s).\n" msgstr "" #: rquota_svc.c:494 #, c-format msgid "Unable to register (RQUOTAPROG, EXT_RQUOTAVERS, %s).\n" msgstr "" #: rquota_svc.c:542 msgid "svc_run returned\n" msgstr "" #: set_limits_example.c:20 #, c-format msgid "copy_user_quota_limits: Failed to set userquota for uid %ld : %s\n" msgstr "" #: set_limits_example.c:27 #, c-format msgid "copy_user_quota_limits: Failed to get userquota for uid %ld : %s\n" msgstr "" #: set_limits_example.c:43 #, c-format msgid "copy_group_quota_limits: Failed to set groupquota for gid %ld : %s\n" msgstr "" #: set_limits_example.c:50 #, c-format msgid "copy_group_quota_limits: Failed to get groupquota for gid %ld : %s\n" msgstr "" #: svc_socket.c:75 #, c-format msgid "Unrecognized bind address family: %s\n" msgstr "" #: svc_socket.c:85 #, c-format msgid "Unrecognized bind address protocol: %s\n" msgstr "" #: svc_socket.c:95 #, c-format msgid "Unrecognized address semantics: %lu\n" msgstr "" #: svc_socket.c:103 #, c-format msgid "Failed to construct bind address: %s\n" msgstr "" #: svc_socket.c:117 #, c-format msgid "Error creating socket: %s\n" msgstr "" #: svc_socket.c:124 #, c-format msgid "Cannot set IPv6 socket options: %s\n" msgstr "" #: svc_socket.c:131 #, c-format msgid "Cannot set socket options: %s\n" msgstr "" #: svc_socket.c:137 #, c-format msgid "Cannot bind to address: %s\n" msgstr "" #: svc_socket.c:144 #, c-format msgid "Cannot listen to address: %s\n" msgstr "" #: xqmstats.c:32 xqmstats.c:37 msgid "The running kernel does not support XFS\n" msgstr "" #: xqmstats.c:50 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "" #: xqmstats.c:51 #, c-format msgid " reclaims: %u\n" msgstr "" #: xqmstats.c:52 #, c-format msgid " missed reclaims: %u\n" msgstr "" #: xqmstats.c:53 #, c-format msgid " dquot dups: %u\n" msgstr "" #: xqmstats.c:54 #, c-format msgid " cache misses: %u\n" msgstr "" #: xqmstats.c:55 #, c-format msgid " cache hits: %u\n" msgstr "" #: xqmstats.c:56 #, c-format msgid " dquot wants: %u\n" msgstr "" #: xqmstats.c:57 #, c-format msgid " shake reclaims: %u\n" msgstr "" #: xqmstats.c:58 #, c-format msgid " inact reclaims: %u\n" msgstr "" #: xqmstats.c:63 #, c-format msgid "Maximum %u dquots (currently %u incore, %u on freelist)\n" msgstr "" #: edquota.c:50 #, c-format msgid "" "Usage:\n" "\tedquota %1$s[-u] [-F formatname] [-p username] [-f filesystem] " "username ...\n" "\tedquota %1$s-g [-F formatname] [-p groupname] [-f filesystem] " "groupname ...\n" "\tedquota %1$s-P [-F formatname] [-p projectname] [-f filesystem] " "projectname ...\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g|-P] [-F formatname] [-f filesystem] -T username|groupname|" "projectname ...\n" msgstr "" #: edquota.c:55 msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" "-P, --project edit project data\n" msgstr "" #: edquota.c:61 msgid "" "-r, --remote edit remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" #: edquota.c:64 msgid "" "-F, --format=formatname edit quotas of a specific format\n" "-p, --prototype=name copy data from a prototype user/group\n" " --always-resolve always try to resolve name, even if it is\n" " composed only of digits\n" "-f, --filesystem=filesystem edit data only on a specific filesystem\n" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace time of a user/group\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: edquota.c:159 msgid "" "Prototype name does not make sense when editing grace period or times.\n" msgstr "" #: edquota.c:163 msgid "Cannot change grace times over RPC protocol.\n" msgstr "" #: edquota.c:181 #, c-format msgid "Cannot get quota information for user %s\n" msgstr "" #: edquota.c:187 msgid "fsname mismatch\n" msgstr "" #: edquota.c:231 msgid "No filesystems with quota detected.\n" msgstr "" #: edquota.c:247 #, c-format msgid "Cannot create temporary file: %s\n" msgstr "" #: edquota.c:252 #, c-format msgid "Cannot change owner of temporary file: %s\n" msgstr "" #: edquota.c:259 msgid "Cannot write grace times to file.\n" msgstr "" #: edquota.c:264 edquota.c:283 edquota.c:316 edquota.c:335 msgid "Cannot stat file with times.\n" msgstr "" #: edquota.c:270 msgid "Error while editing grace times.\n" msgstr "" #: edquota.c:281 edquota.c:333 msgid "Cannot reopen!\n" msgstr "" #: edquota.c:291 msgid "Failed to parse grace times file.\n" msgstr "" #: edquota.c:301 #, c-format msgid "Cannot get quota information for user %s.\n" msgstr "" #: edquota.c:304 msgid "Cannot write individual grace times to file.\n" msgstr "" #: edquota.c:310 msgid "Cannot write quotas to file.\n" msgstr "" #: edquota.c:322 msgid "Error while editing quotas.\n" msgstr "" #: edquota.c:344 msgid "Cannot read individual grace times from file.\n" msgstr "" #: edquota.c:350 msgid "Cannot read quotas from file.\n" msgstr "" #: quota.c:58 msgid "Usage: quota [-guPqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "" #: quota.c:59 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ...\n" msgstr "" #: quota.c:60 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ...\n" msgstr "" #: quota.c:61 msgid "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -P projectname ...\n" msgstr "" #: quota.c:62 msgid "\tquota [-qvswugPQm] [-F quotaformat] -f filesystem ...\n" msgstr "" #: quota.c:63 msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-P, --project display quota for project\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable[=units] display numbers in human friendly units (MB, " "GB,\n" " ...). Units can be also specified explicitely " "by\n" " an optional argument in format [kgt],[kgt] " "where\n" " the first character specifies space units and " "the\n" " second character specifies inode units\n" " --always-resolve always try to translate name to id, even if it " "is\n" "\t\t\t composed of only digits\n" "-w, --no-wrap do not wrap long lines\n" "-p, --raw-grace print grace time in seconds since epoch\n" "-l, --local-only do not query NFS filesystems\n" "-Q, --quiet-refuse do not print error message when NFS server " "does\n" " not respond\n" "-i, --no-autofs do not query autofs mountpoints\n" "-F, --format=formatname display quota of a specific format\n" "-f, --filesystem-list display quota information only for given\n" " filesystems\n" " --filesystem=path display quota information only for given\n" " filesystem, remaining command line arguments\n" " are still treated as user/group/project names\n" "-A, --all-nfs display quota for all NFS mountpoints\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" " --show-mntpoint show mount point of the file system in output\n" " --hide-device do not show file system device in output\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: quota.c:103 msgid "space" msgstr "" #: quota.c:105 msgid "blocks" msgstr "" #: quota.c:107 #, c-format msgid "Disk quotas for %s %s (%cid %u): %s\n" msgstr "" #: quota.c:110 msgid "Filesystem" msgstr "" #: quota.c:111 quota.c:112 msgid "quota" msgstr "" #: quota.c:111 quota.c:112 msgid "limit" msgstr "" #: quota.c:111 quota.c:112 msgid "grace" msgstr "" #: quota.c:112 msgid "files" msgstr "" #: quota.c:193 msgid "File limit reached on" msgstr "" #: quota.c:199 msgid "In file grace period on" msgstr "" #: quota.c:203 msgid "Over file quota on" msgstr "" #: quota.c:209 msgid "Block limit reached on" msgstr "" #: quota.c:215 msgid "In block grace period on" msgstr "" #: quota.c:219 msgid "Over block quota on" msgstr "" #: quota.c:282 msgid "no limited resources used" msgstr "" #: quota.c:390 msgid "Not enough memory for filesystem names" msgstr "" #: quota.c:407 #, c-format msgid "Warning: Ignoring -%c when filesystem list specified.\n" msgstr "" #: quota.c:416 msgid "No filesystem specified.\n" msgstr "" #: quota.c:424 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "" #: quota.c:430 #, c-format msgid "getgroups(): %s\n" msgstr "" #: quota.c:435 msgid "Project reports not supported without project name\n" msgstr "" #: common.c:129 #, c-format msgid "Quota utilities version %s.\n" msgstr "" #: common.c:130 #, c-format msgid "Compiled with:%s\n" msgstr "" ���������������������������������������������������������quota-4.09/po/remove-potcdate.sin�������������������������������������������������������������������0000664�0000000�0000000�00000000660�14463210551�0017031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 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 } ��������������������������������������������������������������������������������quota-4.09/po/stamp-po������������������������������������������������������������������������������0000664�0000000�0000000�00000000012�14463210551�0014672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������timestamp ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/pot.c������������������������������������������������������������������������������������0000664�0000000�0000000�00000000651�14463210551�0013550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "config.h" #include "pot.h" #include <locale.h> /************************************************************************* * if you want to turn off gettext without changing sources edit pot.h *************************************************************************/ void gettexton(void) { #ifdef USE_GETTEXT setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); textdomain(PACKAGE); #endif } ���������������������������������������������������������������������������������������quota-4.09/pot.h������������������������������������������������������������������������������������0000664�0000000�0000000�00000000256�14463210551�0013556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef GUARD_POT_H #define GUARD_POT_H #ifdef USE_GETTEXT #include <libintl.h> #define _(x) gettext((x)) #else #define _(x) (x) #endif void gettexton(void); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quota.1����������������������������������������������������������������������������������0000664�0000000�0000000�00000012105�14463210551�0014012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH QUOTA 1 .SH NAME quota \- display disk usage and limits .SH SYNOPSIS .B quota [ .B -F .I format-name ] [ .B -guqvswi ] [ .BR -l \ | [ .BR -QAm ]] .br .B quota [ .B -F .I format-name ] [ .B -qvswi ] [ .BR -l \ | [ .BR -QAm ]] .B -u .IR user ... .br .B quota [ .B -F .I format-name ] [ .B -qvswi ] [ .BR -l \ | [ .BR -QAm ]] .B -g .IR group ... .br .B quota [ .B -F .I format-name ] [ .B -qvswi ] [ .BR -l \ | [ .BR -QAm ]] .B -P .IR project ... .br .B quota [ .B -F .I format-name ] [ .B -qvswugQm ] .B -f .IR filesystem ... .SH DESCRIPTION .B quota displays users' disk usage and limits. By default only the user quotas are printed. By default space usage and limits are shown in kbytes (and are named blocks for historical reasons). .PP .B quota reports the quotas of all the filesystems listed in .BR /etc/mtab . For filesystems that are NFS-mounted a call to the rpc.rquotad on the server machine is performed to get the information. .SH OPTIONS .TP .B -F, --format=\f2format-name\f1 Show quota for specified format (ie. don't perform format autodetection). Possible format names are: .B vfsold Original quota format with 16-bit UIDs / GIDs, .B vfsv0 Quota format with 32-bit UIDs / GIDs, 64-bit space usage, 32-bit inode usage and limits, .B vfsv1 Quota format with 64-bit quota limits and usage, .B rpc (quota over NFS), .B xfs (quota on XFS filesystem) .TP .B -g, --group Print group quotas for the group of which the user is a member. The optional .B group argument(s) restricts the display to the specified group(s). .TP .B -u, --user flag is equivalent to the default. .TP .B -P, --project Print project quotas for the specified project. .TP .B -v, --verbose will display quotas on filesystems where no storage is allocated. .TP .B -s, --human-readable[=\f2units\f1] option will make .BR quota (1) try to choose units for showing limits, used space and used inodes. Units can be also specified explicitely by an optional argument in format [ .BR kgt ],[ .BR kgt ] where the first character specifies space units and the second character specifies inode units. .TP .B --always-resolve Always try to translate user / group name to uid / gid even if the name is composed of digits only. .TP .B -p, --raw-grace When user is in grace period, report time in seconds since epoch when his grace time runs out (or has run out). Field is '0' when no grace time is in effect. This is especially useful when parsing output by a script. .TP .B -i, --no-autofs ignore mountpoints mounted by automounter .TP .B -l, --local-only report quotas only on local filesystems (ie. ignore NFS mounted filesystems). .TP .B -A, --all-nfs report quotas for all NFS filesystems even if they report to be on the same device. .TP .B -f, --filesystem-list report quotas only for filesystems specified on command line. .TP .B --filesystem=\f2path\f1 report quotas only for filesystem .BR path . This option can be specified multiple types and quota will be reported for each specified filesystem. Unlike command line option .B -f remaining command like arguments are still treated as user / group / project names to report. .TP .B -m, --no-mixed-pathnames Currently, pathnames of NFSv4 mountpoints are sent without leading slash in the path. .BR rpc.rquotad uses this to recognize NFSv4 mounts and properly prepend pseudoroot of NFS filesystem to the path. If you specify this option, .BR quota will always send paths with a leading slash. This can be useful for legacy reasons but be aware that quota over RPC will stop working if you are using new .BR rpc.rquotad . .TP .B -q, --quiet Print a more terse message, containing only information on filesystems where usage is over quota. .TP .B -Q, --quiet-refuse Do not print error message if connection to .BR rpc.rquotad is refused (usually this happens when .BR rpc.rquotad is not running on the server). .TP .B -w, --no-wrap Do not wrap the line if the device name is too long. This can be useful when parsing the output of .BR quota (1) by a script. .TP .B --show-mntpoint Show also mount point as a filesystem identification. .TP .B --hide-device Do not show device name in a filesystem identification. .LP Specifying both .B \-g and .B \-u displays both the user quotas and the group quotas (for the user). .LP Only the super-user may use the .B \-u flag and the optional .B user argument to view the limits of other users. Also viewing of project quota usage and limits is limited to super-user only. Non-super-users can use the .B \-g flag and optional .B group argument to view only the limits of groups of which they are members. .LP The .B \-q flag takes precedence over the .B \-v flag. .SH DIAGNOSTICS If .B quota exits with a non-zero status, one or more filesystems are over quota. .SH FILES .PD 0 .TP 20 .B aquota.user " or " aquota.group quota file at the filesystem root (version 2 quota, non-XFS filesystems) .TP 20 .B quota.user " or " quota.group quota file at the filesystem root (version 1 quota, non-XFS filesystems) .TP .B /etc/mtab default filesystems .PD .SH SEE ALSO .BR quotactl (2), .BR fstab (5), .BR edquota (8), .BR quotacheck (8), .BR quotaon (8), .BR quota_nld (8), .BR repquota (8), .BR warnquota (8), .BR setquota (8) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quota.c����������������������������������������������������������������������������������0000664�0000000�0000000�00000031610�14463210551�0014076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Basic utility for reporting quotas */ #include "config.h" /* * Disk quota reporting program. */ #include <sys/types.h> #include <sys/param.h> #include <getopt.h> #include <stdio.h> #include <stdlib.h> #include <pwd.h> #include <grp.h> #include <time.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <limits.h> #include <ctype.h> #ifdef RPC #include <rpc/rpc.h> #include "rquota.h" #endif #include "quota.h" #include "quotaops.h" #include "quotasys.h" #include "pot.h" #include "common.h" #define FL_QUIET 1 #define FL_VERBOSE 2 #define FL_USER 4 #define FL_GROUP 8 #define FL_LOCALONLY 32 #define FL_QUIETREFUSE 64 #define FL_NOAUTOFS 128 #define FL_NOWRAP 256 #define FL_FSLIST 512 #define FL_NUMNAMES 1024 #define FL_NFSALL 2048 #define FL_RAWGRACE 4096 #define FL_NO_MIXED_PATHS 8192 #define FL_SHOW_MNTPOINT 16384 #define FL_SHOW_DEVICE 32768 #define FL_PROJECT 65536 static int flags, fmt = -1; static enum s2s_unit spaceunit = S2S_NONE, inodeunit = S2S_NONE; char *progname; static void usage(void) { errstr( "%s%s%s%s%s%s", _("Usage: quota [-guPqvswim] [-l | [-Q | -A]] [-F quotaformat]\n"), _("\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ...\n"), _("\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ...\n"), _("\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -P projectname ...\n"), _("\tquota [-qvswugPQm] [-F quotaformat] -f filesystem ...\n"), _("\n\ -u, --user display quota for user\n\ -g, --group display quota for group\n\ -P, --project display quota for project\n\ -q, --quiet print more terse message\n\ -v, --verbose print more verbose message\n\ -s, --human-readable[=units] display numbers in human friendly units (MB, GB,\n\ ...). Units can be also specified explicitely by\n\ an optional argument in format [kgt],[kgt] where\n\ the first character specifies space units and the\n\ second character specifies inode units\n\ --always-resolve always try to translate name to id, even if it is\n\ composed of only digits\n\ -w, --no-wrap do not wrap long lines\n\ -p, --raw-grace print grace time in seconds since epoch\n\ -l, --local-only do not query NFS filesystems\n\ -Q, --quiet-refuse do not print error message when NFS server does\n\ not respond\n\ -i, --no-autofs do not query autofs mountpoints\n\ -F, --format=formatname display quota of a specific format\n\ -f, --filesystem-list display quota information only for given\n\ filesystems\n\ --filesystem=path display quota information only for given\n\ filesystem, remaining command line arguments\n\ are still treated as user/group/project names\n\ -A, --all-nfs display quota for all NFS mountpoints\n\ -m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n\ --show-mntpoint show mount point of the file system in output\n\ --hide-device do not show file system device in output\n\ -h, --help display this help message and exit\n\ -V, --version display version information and exit\n\n")); fprintf(stderr, _("Bugs to: %s\n"), PACKAGE_BUGREPORT); exit(1); } static void heading(int type, qid_t id, char *name, char *tag) { char *spacehdr; if (spaceunit != S2S_NONE) spacehdr = _("space"); else spacehdr = _("blocks"); printf(_("Disk quotas for %s %s (%cid %u): %s\n"), _(type2name(type)), name, *type2name(type), (uint) id, tag); if (!(flags & FL_QUIET) && !tag[0]) { printf("%15s%8s %7s%8s%8s%8s %7s%8s%8s\n", _("Filesystem"), spacehdr, _("quota"), _("limit"), _("grace"), _("files"), _("quota"), _("limit"), _("grace")); } } static void print_fs_location(struct dquot *q) { struct quota_handle *h = q->dq_h; if (flags & FL_QUIET) { if (flags & FL_SHOW_DEVICE) printf(" %s", h->qh_quotadev); if (flags & FL_SHOW_MNTPOINT) printf(" %s", h->qh_dir); putchar('\n'); } else { int wrap = 0; if (flags & FL_SHOW_DEVICE && flags & FL_SHOW_MNTPOINT && !(flags & FL_NOWRAP)) wrap = 1; else if (flags & FL_SHOW_DEVICE && strlen(h->qh_quotadev) > 15 && !(flags & FL_NOWRAP)) wrap = 1; else if (flags & FL_SHOW_MNTPOINT && strlen(h->qh_dir) > 15 && !(flags & FL_NOWRAP)) wrap = 1; if (flags & FL_SHOW_DEVICE) { if (wrap || flags & FL_SHOW_MNTPOINT) printf("%s", h->qh_quotadev); else printf("%15s", h->qh_quotadev); } if (flags & FL_SHOW_MNTPOINT) { if (flags & FL_SHOW_DEVICE) putchar(' '); if (wrap || flags & FL_SHOW_DEVICE) printf("%s", h->qh_dir); else printf("%15s", h->qh_dir); } if (wrap) printf("\n%15s", ""); } } static int showquotas(int type, qid_t id, int mntcnt, char **mnt) { struct dquot *qlist, *q; char *msgi, *msgb; char timebuf[MAXTIMELEN]; char name[MAXNAMELEN]; struct quota_handle **handles; int lines = 0, bover, iover, over, unlimited; time_t now; time(&now); id2name(id, type, name); handles = create_handle_list(mntcnt, mnt, type, fmt, IOI_READONLY | ((flags & FL_NO_MIXED_PATHS) ? 0 : IOI_NFS_MIXED_PATHS), ((flags & FL_NOAUTOFS) ? MS_NO_AUTOFS : 0) | ((flags & FL_LOCALONLY) ? MS_LOCALONLY : 0) | ((flags & FL_NFSALL) ? MS_NFS_ALL : 0)); qlist = getprivs(id, handles, !mntcnt || (flags & FL_QUIETREFUSE)); if (!qlist) { over = 1; goto out_handles; } over = 0; unlimited = 1; for (q = qlist; q; q = q->dq_next) { bover = iover = 0; if (!q->dq_dqb.dqb_isoftlimit && !q->dq_dqb.dqb_ihardlimit && !q->dq_dqb.dqb_bsoftlimit && !q->dq_dqb.dqb_bhardlimit) { if (!(flags & FL_VERBOSE)) continue; } else { unlimited = 0; } msgi = NULL; if (q->dq_dqb.dqb_ihardlimit && q->dq_dqb.dqb_curinodes >= q->dq_dqb.dqb_ihardlimit) { msgi = _("File limit reached on"); iover = 1; } else if (q->dq_dqb.dqb_isoftlimit && q->dq_dqb.dqb_curinodes > q->dq_dqb.dqb_isoftlimit) { if (q->dq_dqb.dqb_itime > now) { msgi = _("In file grace period on"); iover = 2; } else { msgi = _("Over file quota on"); iover = 3; } } msgb = NULL; if (q->dq_dqb.dqb_bhardlimit && toqb(q->dq_dqb.dqb_curspace) >= q->dq_dqb.dqb_bhardlimit) { msgb = _("Block limit reached on"); bover = 1; } else if (q->dq_dqb.dqb_bsoftlimit && toqb(q->dq_dqb.dqb_curspace) > q->dq_dqb.dqb_bsoftlimit) { if (q->dq_dqb.dqb_btime > now) { msgb = _("In block grace period on"); bover = 2; } else { msgb = _("Over block quota on"); bover = 3; } } over |= bover | iover; if (flags & FL_QUIET) { if ((msgi || msgb) && !lines++) heading(type, id, name, ""); if (msgi) { printf("\t%s", msgi); print_fs_location(q); } if (msgb) { printf("\t%s", msgb); print_fs_location(q); } continue; } if ((flags & FL_VERBOSE) || q->dq_dqb.dqb_curspace || q->dq_dqb.dqb_curinodes) { char numbuf[3][MAXNUMLEN]; if (!lines++) heading(type, id, name, ""); print_fs_location(q); if (!(flags & FL_RAWGRACE)) { if (bover) difftime2str(q->dq_dqb.dqb_btime, timebuf); else timebuf[0] = 0; } else { if (bover) sprintf(timebuf, "%llu", (long long unsigned int)q->dq_dqb.dqb_btime); else strcpy(timebuf, "0"); } space2str(toqb(q->dq_dqb.dqb_curspace), numbuf[0], spaceunit); space2str(q->dq_dqb.dqb_bsoftlimit, numbuf[1], spaceunit); space2str(q->dq_dqb.dqb_bhardlimit, numbuf[2], spaceunit); printf(" %7s%c %6s %7s %7s", numbuf[0], bover ? '*' : ' ', numbuf[1], numbuf[2], timebuf); if (!(flags & FL_RAWGRACE)) { if (iover) difftime2str(q->dq_dqb.dqb_itime, timebuf); else timebuf[0] = 0; } else { if (iover) sprintf(timebuf, "%llu", (long long unsigned int)q->dq_dqb.dqb_itime); else strcpy(timebuf, "0"); } number2str(q->dq_dqb.dqb_curinodes, numbuf[0], inodeunit); number2str(q->dq_dqb.dqb_isoftlimit, numbuf[1], inodeunit); number2str(q->dq_dqb.dqb_ihardlimit, numbuf[2], inodeunit); printf(" %7s%c %6s %7s %7s\n", numbuf[0], iover ? '*' : ' ', numbuf[1], numbuf[2], timebuf); continue; } } if (!(flags & FL_QUIET) && !lines && qlist) heading(type, id, name, unlimited ? _("none") : _("no limited resources used")); freeprivs(qlist); out_handles: dispose_handle_list(handles); return over > 0 ? 1 : 0; } int main(int argc, char **argv) { int ngroups; gid_t gidset[NGROUPS_MAX], *gidsetp; char **fsnames = NULL; int fscount = 0; int i, ret, type = 0; struct option long_opts[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "project", 0, NULL, 'P' }, { "quiet", 0, NULL, 'q' }, { "verbose", 0, NULL, 'v' }, { "human-readable", 2, NULL, 's' }, { "always-resolve", 0, NULL, 256 }, { "raw-grace", 0, NULL, 'p' }, { "local-only", 0, NULL, 'l' }, { "no-autofs", 0, NULL, 'i' }, { "quiet-refuse", 0, NULL, 'Q' }, { "format", 1, NULL, 'F' }, { "no-wrap", 0, NULL, 'w' }, { "filesystem-list", 0, NULL, 'f' }, { "all-nfs", 0, NULL, 'A' }, { "no-mixed-pathnames", 0, NULL, 'm' }, { "show-mntpoint", 0, NULL, 257 }, { "hide-device", 0, NULL, 258 }, { "filesystem", 1, NULL, 259 }, { NULL, 0, NULL, 0 } }; gettexton(); progname = basename(argv[0]); flags |= FL_SHOW_DEVICE; while ((ret = getopt_long(argc, argv, "hguqvs::PVliQF:wfApm", long_opts, NULL)) != -1) { switch (ret) { case 'g': flags |= FL_GROUP; break; case 'u': flags |= FL_USER; break; case 'P': flags |= FL_PROJECT; break; case 'q': flags |= FL_QUIET; break; case 'v': flags |= FL_VERBOSE; break; case 'F': if ((fmt = name2fmt(optarg)) == QF_ERROR) /* Error? */ exit(1); break; case 's': inodeunit = spaceunit = S2S_AUTO; if (optarg) { if (unitopt2unit(optarg, &spaceunit, &inodeunit) < 0) die(1, _("Bad output format units for human readable output: %s\n"), optarg); } break; case 'p': flags |= FL_RAWGRACE; break; case 256: flags |= FL_NUMNAMES; break; case 'l': flags |= FL_LOCALONLY; break; case 'Q': flags |= FL_QUIETREFUSE; break; case 'i': flags |= FL_NOAUTOFS; break; case 'w': flags |= FL_NOWRAP; break; case 'f': flags |= FL_FSLIST; break; case 'A': flags |= FL_NFSALL; break; case 'm': flags |= FL_NO_MIXED_PATHS; break; case 257: flags |= FL_SHOW_MNTPOINT; break; case 258: flags &= ~FL_SHOW_DEVICE; break; case 259: fscount++; fsnames = realloc(fsnames, fscount * sizeof(char *)); if (!fsnames) die(1, _("Not enough memory for filesystem names")); fsnames[fscount - 1] = optarg; break; case 'V': version(); exit(0); case 'h': default: usage(); } } argc -= optind; argv += optind; if (!(flags & FL_USER) && !(flags & FL_GROUP) && !(flags & FL_PROJECT)) flags |= FL_USER; if (((flags & FL_FSLIST) || fscount) && flags & (FL_LOCALONLY | FL_NOAUTOFS)) errstr(_("Warning: Ignoring -%c when filesystem list specified.\n"), flags & FL_LOCALONLY ? 'l' : 'i'); if (fscount && flags & FL_FSLIST) die(1, "Cannot use both --filesystem and -f"); init_kernel_interface(); ret = 0; if (argc == 0 || flags & FL_FSLIST) { if (flags & FL_FSLIST && argc == 0) die(1, _("No filesystem specified.\n")); if (flags & FL_USER) ret |= showquotas(USRQUOTA, getuid(), argc, argv); if (flags & FL_GROUP) { ngroups = sysconf(_SC_NGROUPS_MAX); if (ngroups > NGROUPS_MAX) { gidsetp = malloc(ngroups * sizeof(gid_t)); if (!gidsetp) die(1, _("Gid set allocation (%d): %s\n"), ngroups, strerror(errno)); } else { gidsetp = &gidset[0]; } ngroups = getgroups(ngroups, gidsetp); if (ngroups < 0) die(1, _("getgroups(): %s\n"), strerror(errno)); for (i = 0; i < ngroups; i++) ret |= showquotas(GRPQUOTA, gidsetp[i], argc, argv); } if (flags & FL_PROJECT) die(1, _("Project reports not supported without project name\n")); exit(ret); } if (flags & FL_USER) type++; if (flags & FL_GROUP) type++; if (flags & FL_PROJECT) type++; if (type > 1) usage(); if (flags & FL_USER) for (; argc > 0; argc--, argv++) ret |= showquotas(USRQUOTA, user2uid(*argv, !!(flags & FL_NUMNAMES), NULL), fscount, fsnames); else if (flags & FL_GROUP) for (; argc > 0; argc--, argv++) ret |= showquotas(GRPQUOTA, group2gid(*argv, !!(flags & FL_NUMNAMES), NULL), fscount, fsnames); else if (flags & FL_PROJECT) for (; argc > 0; argc--, argv++) ret |= showquotas(PRJQUOTA, project2pid(*argv, !!(flags & FL_NUMNAMES), NULL), fscount, fsnames); return ret; } ������������������������������������������������������������������������������������������������������������������������quota-4.09/quota.h����������������������������������������������������������������������������������0000664�0000000�0000000�00000013245�14463210551�0014107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef GUARD_QUOTA_H #define GUARD_QUOTA_H #include <sys/types.h> #include <stdint.h> typedef u_int32_t qid_t; /* Type in which we store ids in memory */ typedef int64_t qsize_t; /* Type in which we store size limitations */ #define QSIZE_MAX INT64_MAX /* Maximum value storable in qsize_t */ #define MAXQUOTAS 3 #define USRQUOTA 0 /* element used for user quotas */ #define GRPQUOTA 1 /* element used for group quotas */ #define PRJQUOTA 2 /* element used for project quotas */ /* * Definitions for the default names of the quotas files. * N_ is gettext magic for static strings */ #define N_(x) (x) #define INITQFNAMES { \ N_("user"), /* USRQUOTA */ \ N_("group"), /* GRPQUOTA */ \ N_("project"), /* PRJQUOTA */ \ N_("undefined"), \ } /* * Definitions of magics and versions of current quota files */ #define INITQMAGICS {\ 0xd9c01f11, /* USRQUOTA */\ 0xd9c01927 /* GRPQUOTA */\ } /* Size of blocks in which are counted size limits in generic utility parts */ #define QUOTABLOCK_BITS 10 #define QUOTABLOCK_SIZE (1 << QUOTABLOCK_BITS) /* Conversion routines from and to quota blocks */ #define qb2kb(x) ((x) << (QUOTABLOCK_BITS-10)) #define kb2qb(x) ((x) >> (QUOTABLOCK_BITS-10)) #define toqb(x) (((x) + QUOTABLOCK_SIZE - 1) >> QUOTABLOCK_BITS) /* * Command definitions for the 'quotactl' system call. * The commands are broken into a main command defined below * and a subcommand that is used to convey the type of * quota that is being manipulated (see above). */ #define SUBCMDMASK 0x00ff #define SUBCMDSHIFT 8 #define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK)) #define Q_6_5_QUOTAON 0x0100 /* enable quotas */ #define Q_6_5_QUOTAOFF 0x0200 /* disable quotas */ #define Q_6_5_SYNC 0x0600 /* sync disk copy of a filesystems quotas */ #define Q_SYNC 0x800001 /* sync disk copy of a filesystems quotas */ #define Q_QUOTAON 0x800002 /* turn quotas on */ #define Q_QUOTAOFF 0x800003 /* turn quotas off */ #define Q_GETFMT 0x800004 /* get quota format used on given filesystem */ #define Q_GETINFO 0x800005 /* get information about quota files */ #define Q_SETINFO 0x800006 /* set information about quota files */ #define Q_GETQUOTA 0x800007 /* get user quota structure */ #define Q_SETQUOTA 0x800008 /* set user quota structure */ #define Q_GETNEXTQUOTA 0x800009 /* get disk limits and usage >= ID */ /* * Quota structure used for communication with userspace via quotactl * Following flags are used to specify which fields are valid */ #define QIF_BLIMITS 1 #define QIF_SPACE 2 #define QIF_ILIMITS 4 #define QIF_INODES 8 #define QIF_BTIME 16 #define QIF_ITIME 32 #define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS) #define QIF_USAGE (QIF_SPACE | QIF_INODES) #define QIF_TIMES (QIF_BTIME | QIF_ITIME) #define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES) struct if_dqblk { u_int64_t dqb_bhardlimit; u_int64_t dqb_bsoftlimit; u_int64_t dqb_curspace; u_int64_t dqb_ihardlimit; u_int64_t dqb_isoftlimit; u_int64_t dqb_curinodes; u_int64_t dqb_btime; u_int64_t dqb_itime; u_int32_t dqb_valid; }; struct if_nextdqblk { u_int64_t dqb_bhardlimit; u_int64_t dqb_bsoftlimit; u_int64_t dqb_curspace; u_int64_t dqb_ihardlimit; u_int64_t dqb_isoftlimit; u_int64_t dqb_curinodes; u_int64_t dqb_btime; u_int64_t dqb_itime; u_int32_t dqb_valid; u_int32_t dqb_id; }; /* * Structure used for setting quota information about file via quotactl * Following flags are used to specify which fields are valid */ #define IIF_BGRACE 1 #define IIF_IGRACE 2 #define IIF_FLAGS 4 #define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS) #define DQF_SYS_FILE 0x10000 /* Quota stored in a system file */ struct if_dqinfo { u_int64_t dqi_bgrace; u_int64_t dqi_igrace; u_int32_t dqi_flags; u_int32_t dqi_valid; }; /* * Definitions for quota netlink interface */ #define QUOTA_NL_NOWARN 0 #define QUOTA_NL_IHARDWARN 1 /* Inode hardlimit reached */ #define QUOTA_NL_ISOFTLONGWARN 2 /* Inode grace time expired */ #define QUOTA_NL_ISOFTWARN 3 /* Inode softlimit reached */ #define QUOTA_NL_BHARDWARN 4 /* Block hardlimit reached */ #define QUOTA_NL_BSOFTLONGWARN 5 /* Block grace time expired */ #define QUOTA_NL_BSOFTWARN 6 /* Block softlimit reached */ #define QUOTA_NL_IHARDBELOW 7 /* Usage got below inode hardlimit */ #define QUOTA_NL_ISOFTBELOW 8 /* Usage got below inode softlimit */ #define QUOTA_NL_BHARDBELOW 9 /* Usage got below block hardlimit */ #define QUOTA_NL_BSOFTBELOW 10 /* Usage got below block softlimit */ enum { QUOTA_NL_C_UNSPEC, QUOTA_NL_C_WARNING, ENUM_QUOTA_NL_C_MAX, }; #define QUOTA_NL_C_MAX (ENUM_QUOTA_NL_C_MAX - 1) enum { QUOTA_NL_A_UNSPEC, QUOTA_NL_A_QTYPE, QUOTA_NL_A_EXCESS_ID, QUOTA_NL_A_WARNING, QUOTA_NL_A_DEV_MAJOR, QUOTA_NL_A_DEV_MINOR, QUOTA_NL_A_CAUSED_ID, ENUM_QUOTA_NL_A_MAX, }; #define QUOTA_NL_A_MAX (ENUM_QUOTA_NL_A_MAX - 1) /* Quota format identifiers */ #define QFMT_VFS_OLD 1 #define QFMT_VFS_V0 2 #define QFMT_OCFS2 3 #define QFMT_VFS_V1 4 /* Flags supported by kernel */ #define V1_DQF_RSQUASH 1 /* Ioctl for getting quota size */ #include <sys/ioctl.h> #ifndef FIOQSIZE #if defined(__alpha__) || defined(__powerpc__) || defined(__sh__) || defined(__sparc__) || defined(__sparc64__) #define FIOQSIZE _IOR('f', 128, loff_t) #elif defined(__arm__) || defined(__mc68000__) || defined(__s390__) #define FIOQSIZE 0x545E #elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__ia64__) || defined(__parisc__) || defined(__cris__) || defined(__hppa__) || defined(__x86_64__) #define FIOQSIZE 0x5460 #elif defined(__mips__) || defined(__mips64__) #define FIOQSIZE 0x6667 #endif #endif long quotactl(int, const char *, qid_t, caddr_t); #endif /* _QUOTA_ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quota_nld.8������������������������������������������������������������������������������0000664�0000000�0000000�00000002643�14463210551�0014664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH RQUOTAD 8 .SH NAME quota_nld \- quota netlink message daemon .SH SYNOPSIS .B quota_nld [[ .B \-D | .B \-C ][ .B \-F ][ .B \-b ]] .SH DESCRIPTION .BR quota_nld listens on netlink socket and processes received quota warnings. By default .BR quota_nld forwards warning messages to both the system's DBUS (so that the desktop manager can display a dialog) and the last-accessed terminal of the user to whom each warning is directed. Either of these destinations can be disabled with the .B \-D and .B \-C options, respectively. In the case of the user's terminal, quota messages about falling below the hard and soft limits are not sent unless the .B \-b option is specified. In the case of the DBUS, all quota messages are sent. Note, that you have to enable the kernel support for sending quota messages over netlink (in Filesystems->Quota menu). .SH OPTIONS .TP .B \-V, \-\-version Show version of quota tools and exit. .TP .B \-h, \-\-help Show a usage message and exit. .TP .B \-D, \-\-no-dbus Do not forward quota warnings to DBUS. .TP .B \-C, \-\-no-console Do not print quota warnings to the user's last-accessed terminal. .TP .B \-b, \-\-print-below If quota warnings are printed to users' terminals, include messages about falling below their hard and soft limits. .TP .B \-F, \-\-foreground Run daemon in foreground (may be useful for debugging purposes). .SH "SEE ALSO" .BR quota (1), .BR netlink (7), .BR dbus.freedesktop.org ���������������������������������������������������������������������������������������������quota-4.09/quota_nld.c������������������������������������������������������������������������������0000664�0000000�0000000�00000031337�14463210551�0014741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * A deamon to read quota warning messages from the kernel netlink socket * and either pipe them to the system DBUS or write them to user's console * * Copyright (c) 2007 SUSE CR, All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would 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. * */ #include "config.h" #include <stdio.h> #include <unistd.h> #include <getopt.h> #include <utmp.h> #include <errno.h> #include <string.h> #include <fcntl.h> #include <limits.h> #include <signal.h> #include <sys/stat.h> #include <asm/types.h> #include <linux/netlink.h> #include <netlink/socket.h> #include <netlink/genl/genl.h> #include <netlink/genl/ctrl.h> #include <dbus/dbus.h> #include "pot.h" #include "common.h" #include "quotasys.h" #include "quota.h" char *progname; struct quota_warning { uint32_t qtype; uint64_t excess_id; uint32_t warntype; uint32_t dev_major; uint32_t dev_minor; uint64_t caused_id; }; static struct nla_policy quota_nl_warn_cmd_policy[QUOTA_NL_A_MAX+1] = { [QUOTA_NL_A_QTYPE] = { .type = NLA_U32 }, [QUOTA_NL_A_EXCESS_ID] = { .type = NLA_U64 }, [QUOTA_NL_A_WARNING] = { .type = NLA_U32 }, [QUOTA_NL_A_DEV_MAJOR] = { .type = NLA_U32 }, [QUOTA_NL_A_DEV_MINOR] = { .type = NLA_U32 }, [QUOTA_NL_A_CAUSED_ID] = { .type = NLA_U64 }, }; /* User options */ #define FL_NODBUS 1 #define FL_NOCONSOLE 2 #define FL_NODAEMON 4 #define FL_PRINTBELOW 8 static int flags; static DBusConnection *dhandle; static const struct option options[] = { { "version", 0, NULL, 'V' }, { "help", 0, NULL, 'h' }, { "no-dbus", 0, NULL, 'D' }, { "no-console", 0, NULL, 'C' }, { "foreground", 0, NULL, 'F' }, { "print-below", 0, NULL, 'b' }, { NULL, 0, NULL, 0 } }; static void show_help(void) { errstr(_("Usage: %s [options]\nOptions are:\n\ -h --help shows this text\n\ -V --version shows version information\n\ -C --no-console do not try to write messages to console\n\ -b --print-below write to console also information about getting below hard/soft limits\n\ -D --no-dbus do not try to write messages to DBUS\n\ -F --foreground run daemon in foreground\n"), progname); } static void parse_options(int argc, char **argv) { int opt; while ((opt = getopt_long(argc, argv, "VhDCFb", options, NULL)) >= 0) { switch (opt) { case 'V': version(); exit(0); case 'h': show_help(); exit(0); case 'D': flags |= FL_NODBUS; break; case 'C': flags |= FL_NOCONSOLE; break; case 'F': flags |= FL_NODAEMON; break; case 'b': flags |= FL_PRINTBELOW; break; default: errstr(_("Unknown option '%c'.\n"), opt); show_help(); exit(1); } } if (flags & FL_NODBUS && flags & FL_NOCONSOLE) { errstr(_("No possible destination for messages. Nothing to do.\n")); exit(0); } } static void write_console_warning(struct quota_warning *warn); static void write_dbus_warning(struct DBusConnection *dhandle, struct quota_warning *warn); /* Parse netlink message and process it. */ static int quota_nl_parser(struct nl_msg *msg, void *arg) { struct nlmsghdr *nlh = nlmsg_hdr(msg); struct genlmsghdr *ghdr; struct nlattr *attrs[QUOTA_NL_A_MAX+1]; struct quota_warning warn; int ret; if (!genlmsg_valid_hdr(nlh, 0)) return 0; ghdr = nlmsg_data(nlh); /* Unknown message? Ignore... */ if (ghdr->cmd != QUOTA_NL_C_WARNING) return 0; ret = genlmsg_parse(nlh, 0, attrs, QUOTA_NL_A_MAX, quota_nl_warn_cmd_policy); if (ret < 0) { errstr(_("Error parsing netlink message.\n")); return ret; } if (!attrs[QUOTA_NL_A_QTYPE] || !attrs[QUOTA_NL_A_EXCESS_ID] || !attrs[QUOTA_NL_A_WARNING] || !attrs[QUOTA_NL_A_DEV_MAJOR] || !attrs[QUOTA_NL_A_DEV_MAJOR] || !attrs[QUOTA_NL_A_DEV_MINOR] || !attrs[QUOTA_NL_A_CAUSED_ID]) { errstr(_("Unknown format of kernel netlink message!\nMaybe your quota tools are too old?\n")); return -EINVAL; } warn.qtype = nla_get_u32(attrs[QUOTA_NL_A_QTYPE]); warn.excess_id = nla_get_u64(attrs[QUOTA_NL_A_EXCESS_ID]); warn.warntype = nla_get_u32(attrs[QUOTA_NL_A_WARNING]); warn.dev_major = nla_get_u32(attrs[QUOTA_NL_A_DEV_MAJOR]); warn.dev_minor = nla_get_u32(attrs[QUOTA_NL_A_DEV_MINOR]); warn.caused_id = nla_get_u64(attrs[QUOTA_NL_A_CAUSED_ID]); if (!(flags & FL_NOCONSOLE) && warn.qtype != PRJQUOTA) write_console_warning(&warn); if (!(flags & FL_NODBUS)) write_dbus_warning(dhandle, &warn); return 0; } static struct nl_sock *init_netlink(void) { struct nl_sock *sock; int ret, mc_family; sock = nl_socket_alloc(); if (!sock) die(2, _("Cannot allocate netlink socket!\n")); nl_socket_disable_seq_check(sock); ret = nl_socket_modify_cb(sock, NL_CB_VALID, NL_CB_CUSTOM, quota_nl_parser, NULL); if (ret < 0) die(2, _("Cannot register callback for" " netlink messages: %s\n"), strerror(-ret)); ret = genl_connect(sock); if (ret < 0) die(2, _("Cannot connect to netlink socket: %s\n"), strerror(-ret)); mc_family = genl_ctrl_resolve_grp(sock, "VFS_DQUOT", "events"); if (mc_family < 0) { /* * Using family id for multicasting is wrong but I messed up * kernel netlink interface by using family id as a multicast * group id in kernel so we have to carry this code to keep * compatibility with older kernels. */ mc_family = genl_ctrl_resolve(sock, "VFS_DQUOT"); if (mc_family < 0) die(2, _("Cannot resolve quota netlink name: %s\n"), strerror(-mc_family)); } ret = nl_socket_add_membership(sock, mc_family); if (ret < 0) die(2, _("Cannot join quota multicast group: %s\n"), strerror(-ret)); return sock; } static DBusConnection *init_dbus(void) { DBusConnection *handle; DBusError err; dbus_error_init(&err); handle = dbus_bus_get(DBUS_BUS_SYSTEM, &err); if (dbus_error_is_set(&err)) die(2, _("Cannot connect to system DBUS: %s\n"), err.message); dbus_connection_set_exit_on_disconnect(handle, FALSE); return handle; } static int write_all(int fd, char *buf, int len) { int ret; while (len) { ret = write(fd, buf, len); if (ret < 0) return -1; buf += ret; len -= ret; } return 0; } #define WARN_BUF_SIZE 512 /* Scan through utmp, find latest used controlling tty and write to it */ static void write_console_warning(struct quota_warning *warn) { struct utmp *uent; char user[MAXNAMELEN]; struct stat st; char dev[PATH_MAX]; time_t max_atime = 0; char max_dev[PATH_MAX]; int fd; char warnbuf[WARN_BUF_SIZE]; char *level, *msg; if ((warn->warntype == QUOTA_NL_IHARDBELOW || warn->warntype == QUOTA_NL_ISOFTBELOW || warn->warntype == QUOTA_NL_BHARDBELOW || warn->warntype == QUOTA_NL_BSOFTBELOW) && !(flags & FL_PRINTBELOW)) return; uid2user(warn->caused_id, user); if (strlen(user) > UT_NAMESIZE) goto skip_utmp; strcpy(dev, "/dev/"); setutent(); endutent(); while ((uent = getutent())) { if (uent->ut_type != USER_PROCESS) continue; /* Entry for a different user? */ if (strncmp(user, uent->ut_user, UT_NAMESIZE)) continue; sstrncpy(dev+5, uent->ut_line, PATH_MAX-5); if (stat(dev, &st) < 0) continue; /* Failed to stat - not a good candidate for warning... */ if (max_atime < st.st_atime) { max_atime = st.st_atime; strcpy(max_dev, dev); } } if (!max_atime) { skip_utmp: /* * This can happen quite easily so don't spam syslog with * the error */ if (flags & FL_NODAEMON) errstr(_("Failed to find tty of user %llu to report warning to.\n"), (unsigned long long)warn->caused_id); return; } fd = open(max_dev, O_WRONLY); if (fd < 0) { errstr(_("Failed to open tty %s of user %llu to report warning.\n"), dev, (unsigned long long)warn->caused_id); return; } id2name(warn->excess_id, warn->qtype, user); if (warn->warntype == QUOTA_NL_ISOFTWARN || warn->warntype == QUOTA_NL_BSOFTWARN) level = _("Warning"); else if (warn->warntype == QUOTA_NL_IHARDWARN || warn->warntype == QUOTA_NL_BHARDWARN) level = _("Error"); else level = _("Info"); switch (warn->warntype) { case QUOTA_NL_IHARDWARN: msg = _("file limit reached"); break; case QUOTA_NL_ISOFTLONGWARN: msg = _("file quota exceeded too long"); break; case QUOTA_NL_ISOFTWARN: msg = _("file quota exceeded"); break; case QUOTA_NL_BHARDWARN: msg = _("block limit reached"); break; case QUOTA_NL_BSOFTLONGWARN: msg = _("block quota exceeded too long"); break; case QUOTA_NL_BSOFTWARN: msg = _("block quota exceeded"); break; case QUOTA_NL_IHARDBELOW: msg = _("got below file limit"); break; case QUOTA_NL_ISOFTBELOW: msg = _("got below file quota"); break; case QUOTA_NL_BHARDBELOW: msg = _("got below block limit"); break; case QUOTA_NL_BSOFTBELOW: msg = _("got below block quota"); break; default: msg = _("unknown quota warning"); } sprintf(warnbuf, "%s: %s %s %s.\r\n", level, type2name(warn->qtype), user, msg); if (write_all(fd, warnbuf, strlen(warnbuf)) < 0) errstr(_("Failed to write quota message for user %llu to %s: %s\n"), (unsigned long long)warn->caused_id, dev, strerror(errno)); close(fd); } /* Send warning through DBUS */ static void write_dbus_warning(struct DBusConnection *dhandle, struct quota_warning *warn) { DBusMessage* msg; DBusMessageIter args; msg = dbus_message_new_signal("/", "com.system.quota.warning", "warning"); if (!msg) { no_mem: errstr(_("Cannot create DBUS message: No enough memory.\n")); goto out; } dbus_message_iter_init_append(msg, &args); if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT32, &warn->qtype)) goto no_mem; if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT64, &warn->excess_id)) goto no_mem; if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT32, &warn->warntype)) goto no_mem; if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT32, &warn->dev_major)) goto no_mem; if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT32, &warn->dev_minor)) goto no_mem; if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT64, &warn->caused_id)) goto no_mem; if (!dbus_connection_send(dhandle, msg, NULL)) { errstr(_("Failed to write message to dbus: No enough memory.\n")); goto out; } dbus_connection_flush(dhandle); out: if (msg) dbus_message_unref(msg); } static void run(struct nl_sock *nsock) { int ret; while (1) { ret = nl_recvmsgs_default(nsock); if (ret < 0) errstr(_("Failed to read or parse quota netlink" " message: %s\n"), strerror(-ret)); } } /* Build file name (absolute path) to PID file of this daemon. * The returned name is allocated on heap. */ static char *build_pid_file_name(void) { char *pid_name = NULL; if (!progname) { errstr(_("Undefined program name.\n")); return NULL; } pid_name = malloc(strlen(PID_DIR) + 1 + strlen(progname) + 4 + 1); if (!pid_name) { errstr(_("Not enough memory to build PID file name.\n")); return NULL; } sprintf(pid_name, "%s/%s.pid", PID_DIR, progname); return pid_name; } /* Store daemon's PID to file */ static int store_pid(void) { FILE *pid_file; char *pid_name; pid_name = build_pid_file_name(); if (!pid_name) return -1; pid_file = fopen(pid_name, "w"); if (!pid_file) { errstr(_("Could not open PID file '%s': %s\n"), pid_name, strerror(errno)); free(pid_name); return -1; } if (fprintf(pid_file, "%jd\n", (intmax_t)getpid()) < 0) { errstr(_("Could not write daemon's PID into '%s'.\n"), pid_name); fclose(pid_file); free(pid_name); return -1; } if (fclose(pid_file)) { errstr(_("Could not close PID file '%s'.\n"), pid_name); free(pid_name); return -1; } free(pid_name); return 0; } /* Handler for SIGTERM to remove PID file */ static void remove_pid(int signal) { char *pid_name; pid_name = build_pid_file_name(); if (pid_name) { unlink(pid_name); free(pid_name); } exit(EXIT_SUCCESS); } /* Store daemon's PID into file and register its removal on SIGTERM */ static void use_pid_file(void) { struct sigaction term_action; term_action.sa_handler = remove_pid; term_action.sa_flags = 0; if (sigemptyset(&term_action.sa_mask) || sigaction(SIGTERM, &term_action, NULL)) errstr(_("Could not register PID file removal on SIGTERM.\n")); if (store_pid()) errstr(_("Could not store my PID %jd.\n"), (intmax_t )getpid()); } int main(int argc, char **argv) { struct nl_sock *nsock; gettexton(); progname = basename(argv[0]); parse_options(argc, argv); nsock = init_netlink(); if (!(flags & FL_NODBUS)) dhandle = init_dbus(); if (!(flags & FL_NODAEMON)) { use_syslog(); if (daemon(0, 0)) { errstr(_("Failed to daemonize: %s\n"), strerror(errno)); exit(1); }; use_pid_file(); } run(nsock); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quota_tree.h�����������������������������������������������������������������������������0000664�0000000�0000000�00000003714�14463210551�0015126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef GUARD_QUOTA_TREE_H #define GUARD_QUOTA_TREE_H #include <sys/types.h> #include "quota.h" #define QT_TREEOFF 1 /* Offset of tree in file in blocks */ #define QT_TREEDEPTH 4 /* Depth of quota tree */ #define QT_BLKSIZE_BITS 10 #define QT_BLKSIZE (1 << QT_BLKSIZE_BITS) /* Size of block with quota structures */ /* * Structure of header of block with quota structures. It is padded to 16 bytes so * there will be space for exactly 18 quota-entries in a block */ struct qt_disk_dqdbheader { u_int32_t dqdh_next_free; /* Number of next block with free entry */ u_int32_t dqdh_prev_free; /* Number of previous block with free entry */ u_int16_t dqdh_entries; /* Number of valid entries in block */ u_int16_t dqdh_pad1; u_int32_t dqdh_pad2; } __attribute__ ((packed)); struct dquot; struct quota_handle; /* Operations */ struct qtree_fmt_operations { void (*mem2disk_dqblk)(void *disk, struct dquot *dquot); /* Convert given entry from in memory format to disk one */ void (*disk2mem_dqblk)(struct dquot *dquot, void *disk); /* Convert given entry from disk format to in memory one */ int (*is_id)(void *disk, struct dquot *dquot); /* Is this structure for given id? */ }; /* Inmemory copy of version specific information */ struct qtree_mem_dqinfo { unsigned int dqi_blocks; /* # of blocks in quota file */ unsigned int dqi_free_blk; /* First block in list of free blocks */ unsigned int dqi_free_entry; /* First block with free entry */ unsigned int dqi_entry_size; /* Size of quota entry in quota file */ struct qtree_fmt_operations *dqi_ops; /* Operations for entry manipulation */ }; void qtree_write_dquot(struct dquot *dquot); struct dquot *qtree_read_dquot(struct quota_handle *h, qid_t id); void qtree_delete_dquot(struct dquot *dquot); int qtree_entry_unused(struct qtree_mem_dqinfo *info, char *disk); int qtree_scan_dquots(struct quota_handle *h, int (*process_dquot) (struct dquot *, char *)); int qtree_dqstr_in_blk(struct qtree_mem_dqinfo *info); #endif ����������������������������������������������������quota-4.09/quotacheck.8�����������������������������������������������������������������������������0000664�0000000�0000000�00000012735�14463210551�0015030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH quotacheck 8 "Fri Jul 20 2001" .SH NAME quotacheck \- scan a filesystem for disk usage, create, check and repair quota files .SH SYNOPSIS .B quotacheck [ .B \-gubcfinvdMmR ] [ .B \-F .I quota-format ] .B \-a | .I filesystem .br .SH DESCRIPTION .B quotacheck examines each filesystem, builds a table of current disk usage, and compares this table against that recorded in the disk quota file for the filesystem (this step is omitted if option .B -c is specified). If any inconsistencies are detected, both the quota file and the current system copy of the incorrect quotas are updated (the latter only occurs if an active filesystem is checked which is not advised). By default, only user quotas are checked. .B quotacheck expects each filesystem to be checked to have quota files named .I [a]quota.user and .I [a]quota.group located at the root of the associated filesystem. If a file is not present, .B quotacheck will create it. .PP If the quota file is corrupted, .B quotacheck tries to save as much data as possible. Rescuing data may need user intervention. With no additional options .B quotacheck will simply exit in such a situation. When in interactive mode (option .BR -i ) , the user is asked for advice. Advice can also be provided from command line (see option .BR -n ) , which is useful when .B quotacheck is run automatically (ie. from script) and failure is unacceptable. .PP .B quotacheck should be run each time the system boots and mounts non-valid filesystems. This is most likely to happen after a system crash. .PP It is strongly recommended to run .B quotacheck with quotas turned off for the filesystem. Otherwise, possible damage or loss to data in the quota files can result. It is also unwise to run .B quotacheck on a live filesystem as actual usage may change during the scan. To prevent this, .B quotacheck tries to remount the filesystem read-only before starting the scan. After the scan is done it remounts the filesystem read-write. You can disable this with option .BR \-m . You can also make .B quotacheck ignore the failure to remount the filesystem read-only with option .BR \-M . .SH OPTIONS .TP .B -b, --backup Forces .B quotacheck to make backups of the quota file before writing the new data. .TP .B -v, --verbose .B quotacheck reports its operation as it progresses. Normally it operates silently. If the option is specified twice, also the current directory is printed (note that printing can slow down the scan measurably). .TP .B -d, --debug Enable debugging mode. It will result in a lot of information which can be used in debugging the program. The output is very verbose and the scan will be slow. .TP .B -u, --user Only user quotas listed in .I /etc/mtab or on the filesystems specified are to be checked. This is the default action. .TP .B -g, --group Only group quotas listed in .I /etc/mtab or on the filesystems specified are to be checked. .TP .B -c, --create-files Don't read existing quota files. Just perform a new scan and save it to disk. .B quotacheck also skips scanning of old quota files when they are not found. .TP .B -f, --force Forces checking and writing of new quota files on filesystems with quotas enabled. This is not recommended as the created quota files may be out of sync. .TP .B -M, --try-remount This flag forces checking of filesystem in read-write mode if a remount fails. Do this only when you are sure no process will write to a filesystem while scanning. .TP .B -m, --no-remount Don't try to remount filesystem read-only. See comment with option .BR \-M . .TP .B -i, --interactive Interactive mode. By default .B quotacheck exits when it finds an error. In interactive mode user is asked for input instead. See option .BR \-n . .TP .B -n, --use-first-dquot If the quota files become corrupted, it is possible for duplicate entries for a single user or group ID to exist. Normally in this case, .B quotacheck exits or asks user for input. When this option is set, the first entry found is always used (this option works in interactive mode too). .TP .B -F, --format=\f2format-name\f1 Check and fix quota files of specified format (ie. don't perform format auto-detection). This is recommended as detection might not work well on corrupted quota files. Possible format names are: .B vfsold Original quota format with 16-bit UIDs / GIDs, .B vfsv0 Quota format with 32-bit UIDs / GIDs, 64-bit space usage, 32-bit inode usage and limits, .B vfsv1 Quota format with 64-bit quota limits and usage, .B rpc (quota over NFS), .B xfs (quota on XFS filesystem) .TP .B -a, --all Check all mounted non-NFS filesystems in .B /etc/mtab .TP .B -R, --exclude-root When used together with the .B \-a option, all filesystems except for the root filesystem are checked for quotas. .SH NOTE .B quotacheck should only be run by super-user. Non-privileged users are presumably not allowed to read all the directories on the given filesystem. .SH "SEE ALSO" .BR quota (1), .BR quotactl (2), .BR fstab (5), .BR quotaon (8), .BR repquota (8), .BR convertquota (8), .BR setquota (8), .BR edquota (8), .BR fsck (8), .BR efsck (8), .BR e2fsck (8), .BR xfsck (8) .SH FILES .PD 0 .TP 15 .B aquota.user or aquota.group located at filesystem root with quotas (version 2 quota, non-XFS filesystems) .TP 15 .B quota.user or quota.group located at filesystem root with quotas (version 1 quota, non-XFS filesystems) .TP .B /etc/mtab names and locations of mounted filesystems .SH AUTHOR Jan Kara \<jack@suse.cz\> .br Based on old .B quotacheck by: .br Edvard Tuinder \<ed@elm.net\> .br Marco van Wieringen \<mvw@planets.elm.net\> �����������������������������������quota-4.09/quotacheck.c�����������������������������������������������������������������������������0000664�0000000�0000000�00000105304�14463210551�0015076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Utility to check disk quotas * * Some parts of this utility are copied from old quotacheck by * Marco van Wieringen <mvw@planets.elm.net> and Edvard Tuinder <ed@elm.net> * * New quota format implementation - Jan Kara <jack@suse.cz> - Sponsored by SuSE CR */ #include "config.h" #include <dirent.h> #include <stdio.h> #include <string.h> #include <stdarg.h> #include <getopt.h> #include <limits.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/file.h> #include <sys/statfs.h> #include <sys/ioctl.h> #include <sys/mount.h> #include <sys/utsname.h> #ifdef EXT2_DIRECT #include <linux/types.h> #include <ext2fs/ext2fs.h> #endif #include "pot.h" #include "common.h" #include "quotaio.h" #include "quotasys.h" #include "mntopt.h" #include "bylabel.h" #include "quotacheck.h" #include "quotaops.h" #define LINKSHASHSIZE 16384 /* Size of hashtable for hardlinked inodes */ #define DQUOTHASHSIZE 32768 /* Size of hashtable for dquots from file */ struct dlinks { ino_t i_num; struct dlinks *next; }; struct dirs { char *dir_name; struct dirs *next; }; #define BITS_SIZE 4 /* sizeof(bits) == 5 */ #define BLIT_RATIO 10 /* Blit in just 1/10 of blit() calls */ static dev_t cur_dev; /* Device we are working on */ static int files_done, dirs_done; int flags, fmt = -1, cfmt; /* Options from command line; Quota format to use spec. by user; Actual format to check */ static int uwant, gwant, ucheck, gcheck; /* Does user want to check user/group quota; Do we check user/group quota? */ static char *mntpoint; /* Mountpoint to check */ char *progname; struct util_dqinfo old_info[MAXQUOTAS]; /* Loaded infos */ static char extensions[MAXQUOTAS + 2][20] = INITQFNAMES; /* Extensions depending on quota type */ static char *basenames[] = INITQFBASENAMES; /* Names of quota files */ #ifdef DEBUG_MALLOC static size_t malloc_mem = 0; static size_t free_mem = 0; #endif static struct dquot *dquot_hash[MAXQUOTAS][DQUOTHASHSIZE]; static struct dlinks *links_hash[MAXQUOTAS][DQUOTHASHSIZE]; /* * Ok check each memory allocation. */ void *xmalloc(size_t size) { void *ptr; #ifdef DEBUG_MALLOC malloc_mem += size; #endif ptr = malloc(size); if (!ptr) die(3, _("Not enough memory.\n")); memset(ptr, 0, size); return (ptr); } void debug(int df, char *fmtstr, ...) { va_list args; if (!(flags & df)) return; fprintf(stderr, "%s: ", progname); va_start(args, fmtstr); vfprintf(stderr, fmtstr, args); va_end(args); } /* Compute hashvalue for given inode number */ static inline uint hash_ino(uint i_num) { return ((i_num ^ (i_num << 16)) * 997) & (LINKSHASHSIZE - 1); } /* * Store a hardlinked inode as we don't want to count it more then once. */ static int store_dlinks(int type, ino_t i_num) { struct dlinks *lptr; uint hash = hash_ino(i_num); debug(FL_DEBUG, _("Adding hardlink for inode %llu\n"), (unsigned long long)i_num); for (lptr = links_hash[type][hash]; lptr; lptr = lptr->next) if (lptr->i_num == i_num) return 1; lptr = (struct dlinks *)xmalloc(sizeof(struct dlinks)); lptr->i_num = i_num; lptr->next = links_hash[type][hash]; links_hash[type][hash] = lptr; return 0; } /* Hash given id */ static inline uint hash_dquot(uint id) { return ((id ^ (id << 16)) * 997) & (DQUOTHASHSIZE - 1); } /* * Do a lookup of a type of quota for a specific id. Use short cut with * most recently used dquot struct pointer. */ struct dquot *lookup_dquot(qid_t id, int type) { struct dquot *lptr; uint hash = hash_dquot(id); for (lptr = dquot_hash[type][hash]; lptr != NODQUOT; lptr = lptr->dq_next) if (lptr->dq_id == id) return lptr; return NODQUOT; } /* * Add a new dquot for a new id to the list. */ struct dquot *add_dquot(qid_t id, int type) { struct dquot *lptr; uint hash = hash_dquot(id); debug(FL_DEBUG, _("Adding dquot structure type %s for %d\n"), type2name(type), (int)id); lptr = (struct dquot *)xmalloc(sizeof(struct dquot)); lptr->dq_id = id; lptr->dq_next = dquot_hash[type][hash]; dquot_hash[type][hash] = lptr; lptr->dq_dqb.dqb_btime = lptr->dq_dqb.dqb_itime = (time_t) 0; return lptr; } /* * Add a number of blocks and inodes to a quota. */ static void add_to_quota(int type, ino_t i_num, uid_t i_uid, gid_t i_gid, mode_t i_mode, nlink_t i_nlink, loff_t i_space, int need_remember) { qid_t wanted; struct dquot *lptr; if (type == USRQUOTA) wanted = i_uid; else wanted = i_gid; if ((lptr = lookup_dquot(wanted, type)) == NODQUOT) lptr = add_dquot(wanted, type); if (i_nlink != 1 && need_remember) if (store_dlinks(type, i_num)) /* Did we already count this inode? */ return; lptr->dq_dqb.dqb_curinodes++; lptr->dq_dqb.dqb_curspace += i_space;; } /* * Clean up all list from a previous run. */ static void remove_list(void) { int cnt; uint i; struct dquot *dquot, *dquot_free; struct dlinks *dlink, *dlink_free; for (cnt = 0; cnt < MAXQUOTAS; cnt++) { for (i = 0; i < DQUOTHASHSIZE; i++) { dquot = dquot_hash[cnt][i]; while (dquot != NODQUOT) { dquot_free = dquot; dquot = dquot->dq_next; #ifdef DEBUG_MALLOC free_mem += sizeof(struct dquot); #endif free(dquot_free); } dquot_hash[cnt][i] = NODQUOT; } for (i = 0; i < LINKSHASHSIZE; i++) { dlink = links_hash[cnt][i]; while (dlink) { dlink_free = dlink; dlink = dlink->next; #ifdef DEBUG_MALLOC free_mem += sizeof(struct dlinks); #endif free(dlink_free); } links_hash[cnt][i] = NULL; } } } /* Get size used by file */ static loff_t getqsize(const char *fname, struct stat *st) { static char ioctl_fail_warn; int fd; loff_t size; if (S_ISLNK(st->st_mode)) /* There's no way to do ioctl() on links... */ return st->st_blocks << 9; if (!S_ISDIR(st->st_mode) && !S_ISREG(st->st_mode)) return st->st_blocks << 9; if ((fd = open(fname, O_RDONLY)) == -1) die(2, _("Cannot open file %s: %s\n"), fname, strerror(errno)); if (ioctl(fd, FIOQSIZE, &size) == -1) { size = st->st_blocks << 9; if (!ioctl_fail_warn) { ioctl_fail_warn = 1; fputs(_("Cannot get exact used space... Results might be inaccurate.\n"), stderr); } } close(fd); return size; } /* * Show a blitting cursor as means of visual progress indicator. */ static inline void blit(const char *msg) { static int bitc = 0; static const char bits[] = "|/-\\"; static int slow_down; if (flags & FL_VERYVERBOSE && msg) { int len = strlen(msg); putchar('\r'); printf("%.70s", msg); if (len > 70) fputs("...", stdout); else printf("%*s",73-len, ""); } if (flags & FL_VERYVERBOSE || ++slow_down >= BLIT_RATIO) { putchar(bits[bitc]); putchar('\b'); fflush(stdout); bitc++; bitc %= BITS_SIZE; slow_down = 0; } } static void usage(void) { printf(_("Utility for checking and repairing quota files.\n%s [-gucbfinvdmMR] [-F <quota-format>] filesystem|-a\n\n\ -u, --user check user files\n\ -g, --group check group files\n\ -c, --create-files create new quota files\n\ -b, --backup create backups of old quota files\n\ -f, --force force check even if quotas are enabled\n\ -i, --interactive interactive mode\n\ -n, --use-first-dquot use the first copy of duplicated structure\n\ -v, --verbose print more information\n\ -d, --debug print even more messages\n\ -m, --no-remount do not remount filesystem read-only\n\ -M, --try-remount try remounting filesystem read-only,\n\ continue even if it fails\n\ -R, --exclude-root exclude root when checking all filesystems\n\ -F, --format=formatname check quota files of specific format\n\ -a, --all check all filesystems\n\ -h, --help display this message and exit\n\ -V, --version display version information and exit\n\n"), progname); printf(_("Bugs to %s\n"), PACKAGE_BUGREPORT); exit(1); } static void parse_options(int argcnt, char **argstr) { int ret; struct option long_opts[] = { { "version", 0, NULL, 'V' }, { "help", 0, NULL, 'h' }, { "backup", 0, NULL, 'b' }, { "create-files", 0, NULL, 'c' }, { "verbose", 0, NULL, 'v' }, { "debug", 0, NULL, 'd' }, { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "interactive", 0, NULL, 'i' }, { "use-first-dquot", 0, NULL, 'n' }, { "force", 0, NULL, 'f' }, { "format", 1, NULL, 'F' }, { "no-remount", 0, NULL, 'm' }, { "try-remount", 0, NULL, 'M' }, { "exclude-root", 0, NULL, 'R' }, { "all", 0, NULL, 'a' }, { NULL, 0, NULL, 0 } }; while ((ret = getopt_long(argcnt, argstr, "VhbcvugidnfF:mMRa", long_opts, NULL)) != -1) { switch (ret) { case 'b': flags |= FL_BACKUPS; break; case 'g': gwant = 1; break; case 'u': uwant = 1; break; case 'd': flags |= FL_DEBUG; setlinebuf(stderr); break; case 'v': if (flags & FL_VERBOSE) flags |= FL_VERYVERBOSE; else flags |= FL_VERBOSE; break; case 'f': flags |= FL_FORCE; break; case 'i': flags |= FL_INTERACTIVE; break; case 'n': flags |= FL_GUESSDQ; break; case 'c': flags |= FL_NEWFILE; break; case 'V': version(); exit(0); case 'M': flags |= FL_FORCEREMOUNT; break; case 'm': flags |= FL_NOREMOUNT; break; case 'a': flags |= FL_ALL; break; case 'R': flags |= FL_NOROOT; break; case 'F': if ((fmt = name2fmt(optarg)) == QF_ERROR) exit(1); break; default: usage(); } } if (!(uwant | gwant)) uwant = 1; if ((argcnt == optind && !(flags & FL_ALL)) || (argcnt > optind && flags & FL_ALL)) { fputs(_("Bad number of arguments.\n"), stderr); usage(); } if (flags & FL_VERBOSE && flags & FL_DEBUG) flags &= ~FL_VERBOSE; if (!(flags & FL_ALL)) mntpoint = argstr[optind]; else mntpoint = NULL; } #if defined(EXT2_DIRECT) static int ext2_direct_scan(const char *device) { ext2_ino_t i_num; ext2_filsys fs; errcode_t error; ext2_inode_scan scan; struct ext2_inode inode; int inode_buffer_blocks = 0; ext2fs_inode_bitmap inode_used_map; ext2fs_inode_bitmap inode_dir_map; uid_t uid; gid_t gid; int ret = -1; if ((error = ext2fs_open(device, 0, 0, 0, unix_io_manager, &fs))) { errstr(_("error (%d) while opening %s\n"), (int)error, device); return -1; } if ((error = ext2fs_allocate_inode_bitmap(fs, "in-use inode map", &inode_used_map))) { errstr(_("error (%d) while allocating file inode bitmap\n"), (int)error); goto out_free; } if ((error = ext2fs_allocate_inode_bitmap(fs, "directory inode map", &inode_dir_map))) { errstr(_("errstr (%d) while allocating directory inode bitmap\n"), (int)error); goto out_used_map; } if ((error = ext2fs_open_inode_scan(fs, inode_buffer_blocks, &scan))) { errstr(_("error (%d) while opening inode scan\n"), (int)error); goto out_dir_map; } if ((error = ext2fs_get_next_inode(scan, &i_num, &inode))) { errstr(_("error (%d) while starting inode scan\n"), (int)error); goto out_scan; } while (i_num) { if ((i_num == EXT2_ROOT_INO || i_num >= EXT2_FIRST_INO(fs->super)) && inode.i_links_count) { debug(FL_DEBUG, _("Found i_num %ld, blocks %ld\n"), (long)i_num, (long)inode.i_blocks); if (flags & FL_VERBOSE) blit(NULL); uid = inode.i_uid | (inode.i_uid_high << 16); gid = inode.i_gid | (inode.i_gid_high << 16); if (inode.i_uid_high | inode.i_gid_high) debug(FL_DEBUG, _("High uid detected.\n")); if (ucheck) add_to_quota(USRQUOTA, i_num, uid, gid, inode.i_mode, inode.i_links_count, ((loff_t)inode.i_blocks) << 9, 0); if (gcheck) add_to_quota(GRPQUOTA, i_num, uid, gid, inode.i_mode, inode.i_links_count, ((loff_t)inode.i_blocks) << 9, 0); if (S_ISDIR(inode.i_mode)) dirs_done++; else files_done++; } if ((error = ext2fs_get_next_inode(scan, &i_num, &inode))) { errstr(_("Something weird happened while scanning. Error %d\n"), (int)error); goto out_scan; } } ret = 0; out_scan: ext2fs_close_inode_scan(scan); out_dir_map: ext2fs_free_inode_bitmap(inode_dir_map); out_used_map: ext2fs_free_inode_bitmap(inode_used_map); out_free: ext2fs_free(fs); return ret; } #endif /* * Scan a directory with the readdir systemcall. Stat the files and add the sizes * of the files to the appropriate quotas. When we find a dir we recursivly call * ourself to scan that dir. */ static int scan_dir(const char *pathname) { struct dirs *dir_stack = NULL; struct dirs *new_dir; struct dirent *de; struct stat st; loff_t qspace; DIR *dp; int ret; if (lstat(pathname, &st) == -1) { errstr(_("Cannot stat directory %s: %s\n"), pathname, strerror(errno)); goto out; } qspace = getqsize(pathname, &st); if (ucheck) add_to_quota(USRQUOTA, st.st_ino, st.st_uid, st.st_gid, st.st_mode, st.st_nlink, qspace, 0); if (gcheck) add_to_quota(GRPQUOTA, st.st_ino, st.st_uid, st.st_gid, st.st_mode, st.st_nlink, qspace, 0); if (chdir(pathname) == -1) { errstr(_("Cannot chdir to %s: %s\n"), pathname, strerror(errno)); goto out; } if ((dp = opendir(".")) == (DIR *) NULL) die(2, _("\nCannot open directory %s: %s\n"), pathname, strerror(errno)); if (flags & FL_VERYVERBOSE) blit(pathname); while ((de = readdir(dp)) != (struct dirent *)NULL) { if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue; if (flags & FL_VERBOSE) blit(NULL); if ((lstat(de->d_name, &st)) == -1) { errstr(_("lstat: Cannot stat `%s/%s': %s\nGuess you'd better run fsck first !\nexiting...\n"), pathname, de->d_name, strerror(errno)); closedir(dp); goto out; } if (S_ISDIR(st.st_mode)) { if (st.st_dev != cur_dev) continue; /* * Add this to the directory stack and check this later on. */ debug(FL_DEBUG, _("pushd %s/%s\n"), pathname, de->d_name); new_dir = xmalloc(sizeof(struct dirs)); new_dir->dir_name = xmalloc(strlen(pathname) + strlen(de->d_name) + 2); sprintf(new_dir->dir_name, "%s/%s", pathname, de->d_name); new_dir->next = dir_stack; dir_stack = new_dir; } else { qspace = getqsize(de->d_name, &st); if (ucheck) add_to_quota(USRQUOTA, st.st_ino, st.st_uid, st.st_gid, st.st_mode, st.st_nlink, qspace, 1); if (gcheck) add_to_quota(GRPQUOTA, st.st_ino, st.st_uid, st.st_gid, st.st_mode, st.st_nlink, qspace, 1); debug(FL_DEBUG, _("\tAdding %s size %lld ino %d links %d uid %u gid %u\n"), de->d_name, (long long)st.st_size, (int)st.st_ino, (int)st.st_nlink, (int)st.st_uid, (int)st.st_gid); files_done++; } } closedir(dp); /* * Traverse the directory stack, and check it. */ debug(FL_DEBUG, _("Scanning stored directories from directory stack\n")); while (dir_stack != (struct dirs *)NULL) { new_dir = dir_stack; dir_stack = dir_stack->next; debug(FL_DEBUG, _("popd %s\nEntering directory %s\n"), new_dir->dir_name, new_dir->dir_name); ret = scan_dir(new_dir->dir_name); dirs_done++; #ifdef DEBUG_MALLOC free_mem += sizeof(struct dirs) + strlen(new_dir->dir_name) + 1; #endif free(new_dir->dir_name); free(new_dir); if (ret < 0) /* Error while scanning? */ goto out; } debug(FL_DEBUG, _("Leaving %s\n"), pathname); return 0; out: for (new_dir = dir_stack; new_dir; new_dir = dir_stack) { dir_stack = dir_stack->next; #ifdef DEBUG_MALLOC free_mem += sizeof(struct dirs) + strlen(new_dir->dir_name) + 1; #endif free(new_dir->dir_name); free(new_dir); } return -1; } /* Ask user y/n question */ int ask_yn(char *q, int def) { char a[10]; /* Users answer */ printf("%s [%c]: ", q, def ? 'y' : 'n'); fflush(stdout); while (fgets(a, sizeof(a)-1, stdin)) { if (a[0] == '\n') return def; if (!strcasecmp(a, "y\n")) return 1; if (!strcasecmp(a, "n\n")) return 0; printf("Illegal answer. Please answer y/n: "); fflush(stdout); } return def; } /* Do checks and buffer quota file into memory */ static int process_file(struct mount_entry *mnt, int type) { char *qfname = NULL; int fd = -1, ret; debug(FL_DEBUG, _("Going to check %s quota file of %s\n"), _(type2name(type)), mnt->me_dir); if (kern_quota_on(mnt, type, cfmt) >= 0) { /* Is quota enabled? */ if (!(flags & FL_FORCE)) { if (flags & FL_INTERACTIVE) { printf(_("Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file.\n"), _(type2name(type)), mnt->me_dir); if (!ask_yn(_("Should I continue?"), 0)) { printf(_("As you wish... Canceling check of this file.\n")); return -1; } } else die(6, _("Quota for %ss is enabled on mountpoint %s so quotacheck might damage the file.\n\ Please turn quotas off or use -f to force checking.\n"), type2name(type), mnt->me_dir); } /* At least sync quotas so damage will be smaller */ if (quotactl(QCMD((kernel_iface == IFACE_GENERIC)? Q_SYNC : Q_6_5_SYNC, type), mnt->me_devname, 0, NULL) < 0) die(4, _("Error while syncing quotas on %s: %s\n"), mnt->me_devname, strerror(errno)); } if (!(flags & FL_NEWFILE)) { /* Need to buffer file? */ if (get_qf_name(mnt, type, cfmt, 0, &qfname) < 0) { errstr(_("Cannot get quotafile name for %s\n"), mnt->me_devname); return -1; } if ((fd = open(qfname, O_RDONLY)) < 0) { if (errno != ENOENT) { errstr(_("Cannot open quotafile %s: %s\n"), qfname, strerror(errno)); free(qfname); return -1; } /* When file was not found, just skip it */ flags |= FL_NEWFILE; free(qfname); qfname = NULL; } } memset(old_info + type, 0, sizeof(old_info[type])); if (is_tree_qfmt(cfmt)) ret = v2_buffer_file(qfname, fd, type, cfmt); else ret = v1_buffer_file(qfname, fd, type); if (!(flags & FL_NEWFILE)) { free(qfname); close(fd); } return ret; } /* Backup old quotafile and rename new one to right name */ static int rename_files(struct mount_entry *mnt, int type) { char *filename, newfilename[PATH_MAX]; struct stat st; mode_t mode = S_IRUSR | S_IWUSR; #ifdef EXT2_DIRECT long ext2_flags = -1; int fd; #endif if (cfmt == QF_XFS) /* No renaming for xfs/gfs2 */ return 0; debug(FL_DEBUG, _("Renaming new files to proper names.\n")); if (get_qf_name(mnt, type, cfmt, 0, &filename) < 0) die(2, _("Cannot get name of old quotafile on %s.\n"), mnt->me_dir); if (stat(filename, &st) < 0) { /* File doesn't exist? */ if (errno == ENOENT) { debug(FL_DEBUG | FL_VERBOSE, _("Old file not found.\n")); goto rename_new; } errstr(_("Error while searching for old quota file %s: %s\n"), filename, strerror(errno)); free(filename); return -1; } mode = st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO); #ifdef EXT2_DIRECT if ((fd = open(filename, O_RDONLY)) < 0) { if (errno == ENOENT) { debug(FL_DEBUG | FL_VERBOSE, _("Old file found removed during check!\n")); goto rename_new; } errstr(_("Error while opening old quota file %s: %s\n"), filename, strerror(errno)); free(filename); return -1; } if (ioctl(fd, EXT2_IOC_GETFLAGS, &ext2_flags) < 0) debug(FL_DEBUG, _("EXT2_IOC_GETFLAGS failed: %s\n"), strerror(errno)); else if (ext2_flags & EXT2_IMMUTABLE_FL) { /* IMMUTABLE flag set probably because system crashed and quota * was not properly turned off */ debug(FL_DEBUG | FL_VERBOSE, _("Quota file %s has IMMUTABLE flag set. Clearing.\n"), filename); ext2_flags &= ~EXT2_IMMUTABLE_FL; if (ioctl(fd, EXT2_IOC_SETFLAGS, &ext2_flags) < 0) { errstr(_("Failed to remove IMMUTABLE flag from quota file %s: %s\n"), filename, strerror(errno)); free(filename); close(fd); return -1; } } close(fd); #endif if (flags & FL_BACKUPS) { debug(FL_DEBUG, _("Renaming old quotafile to %s~\n"), filename); /* Backup old file */ strcpy(newfilename, filename); /* Make backingup safe */ sstrncat(newfilename, "~", PATH_MAX); if (newfilename[strlen(newfilename) - 1] != '~') die(8, _("Name of quota file too long. Contact %s.\n"), PACKAGE_BUGREPORT); if (rename(filename, newfilename) < 0) { errstr(_("Cannot rename old quotafile %s to %s: %s\n"), filename, newfilename, strerror(errno)); free(filename); return -1; } } debug(FL_DEBUG, _("Renaming new quotafile\n")); rename_new: /* Rename new file to right name */ strcpy(newfilename, filename); sstrncat(newfilename, ".new", PATH_MAX); if (rename(newfilename, filename) < 0) { errstr(_("Cannot rename new quotafile %s to name %s: %s\n"), newfilename, filename, strerror(errno)); free(filename); return -1; } if (chmod(filename, mode) < 0) { errstr(_("Cannot change permission of %s: %s\n"), filename, strerror(errno)); free(filename); return -1; } #ifdef EXT2_DIRECT if (ext2_flags != -1) { if ((fd = open(filename, O_RDONLY)) < 0) { errstr(_("Cannot open new quota file %s: %s\n"), filename, strerror(errno)); free(filename); return -1; } if (ioctl(fd, EXT2_IOC_SETFLAGS, &ext2_flags) < 0) errstr(_("Warning: Cannot set EXT2 flags on %s: %s\n"), filename, strerror(errno)); close(fd); } #endif free(filename); return 0; } /* * Dump the quota info that we have in memory now to the appropriate * quota file. As quotafiles doesn't account to quotas we don't have to * bother about accounting new blocks for quota file */ static int dump_to_file(struct mount_entry *mnt, int type) { struct dquot *dquot; uint i; struct quota_handle *h; unsigned int commit = 0; debug(FL_DEBUG, _("Dumping gathered data for %ss.\n"), _(type2name(type))); if (cfmt == QF_XFS) { if (!(h = init_io(mnt, type, cfmt, IOI_READONLY))) { errstr(_("Cannot initialize IO on xfs/gfs2 quotafile: %s\n"), strerror(errno)); return -1; } } else { if (!(h = new_io(mnt, type, cfmt))) { errstr(_("Cannot initialize IO on new quotafile: %s\n"), strerror(errno)); return -1; } if (!(flags & FL_NEWFILE)) { h->qh_info.dqi_bgrace = old_info[type].dqi_bgrace; h->qh_info.dqi_igrace = old_info[type].dqi_igrace; if (is_tree_qfmt(cfmt)) v2_merge_info(&h->qh_info, old_info + type); mark_quotafile_info_dirty(h); } } for (i = 0; i < DQUOTHASHSIZE; i++) for (dquot = dquot_hash[type][i]; dquot; dquot = dquot->dq_next) { dquot->dq_h = h; /* For XFS/GFS2, we don't bother with actually checking * what the usage value is in the internal quota file. * We simply attempt to update the usage for every quota * we find in the fs scan. The filesystem decides in the * quotactl handler whether to update the usage in the * quota file or not. */ commit = cfmt == QF_XFS ? COMMIT_USAGE : COMMIT_ALL; update_grace_times(dquot); h->qh_ops->commit_dquot(dquot, commit); } if (end_io(h) < 0) { errstr(_("Cannot finish IO on new quotafile: %s\n"), strerror(errno)); return -1; } debug(FL_DEBUG, _("Data dumped.\n")); /* Moving of quota files doesn't apply to GFS2 or XFS */ if (cfmt == QF_XFS) return 0; if (kern_quota_on(mnt, type, cfmt) >= 0) { /* Quota turned on? */ char *filename; if (get_qf_name(mnt, type, cfmt, NF_FORMAT, &filename) < 0) errstr(_("Cannot find checked quota file for %ss on %s!\n"), _(type2name(type)), mnt->me_devname); else { if (quotactl(QCMD((kernel_iface == IFACE_GENERIC) ? Q_QUOTAOFF : Q_6_5_QUOTAOFF, type), mnt->me_devname, 0, NULL) < 0) errstr(_("Cannot turn %s quotas off on %s: %s\nKernel won't know about changes quotacheck did.\n"), _(type2name(type)), mnt->me_devname, strerror(errno)); else { int ret; /* Rename files - if it fails we cannot do anything better than just turn on quotas again */ rename_files(mnt, type); if (kernel_iface == IFACE_GENERIC) ret = quotactl(QCMD(Q_QUOTAON, type), mnt->me_devname, util2kernfmt(cfmt), filename); else ret = quotactl(QCMD(Q_6_5_QUOTAON, type), mnt->me_devname, 0, filename); if (ret < 0) errstr(_("Cannot turn %s quotas on on %s: %s\nKernel won't know about changes quotacheck did.\n"), _(type2name(type)), mnt->me_devname, strerror(errno)); } free(filename); } } else if (rename_files(mnt, type) < 0) return -1; return 0; } /* Substract space used by old quota file from usage. * Return non-zero in case of failure, zero otherwise. */ static int sub_quota_file(struct mount_entry *mnt, int qtype, int ftype) { char *filename; struct stat st; loff_t qspace; struct dquot *d; qid_t id; /* GFS2 and XFS do not have quota files. */ if (cfmt == QF_XFS) return 0; debug(FL_DEBUG, _("Substracting space used by old %s quota file.\n"), _(type2name(ftype))); if (get_qf_name(mnt, ftype, cfmt, 0, &filename) < 0) { debug(FL_VERBOSE | FL_DEBUG, _("Old %s file name could not been determined. Usage will not be subtracted.\n"), _(type2name(ftype))); return 0; } if (stat(filename, &st) < 0) { debug(FL_VERBOSE | FL_DEBUG, _("Cannot stat old %s quota file %s: %s. Usage will not be subtracted.\n"), _(type2name(ftype)), filename, strerror(errno)); free(filename); return 0; } qspace = getqsize(filename, &st); free(filename); if (qtype == USRQUOTA) id = st.st_uid; else id = st.st_gid; if ((d = lookup_dquot(id, qtype)) == NODQUOT) { errstr(_("Quota structure for %s owning quota file not present! Something is really wrong...\n"), _(type2name(qtype))); return -1; } d->dq_dqb.dqb_curinodes--; d->dq_dqb.dqb_curspace -= qspace; debug(FL_DEBUG, _("Substracted %lu bytes.\n"), (unsigned long)qspace); return 0; } /* Buffer quotafile, run filesystem scan, dump quotafiles. * Return non-zero value in case of failure, zero otherwise. */ static int check_dir(struct mount_entry *mnt) { struct stat st; int remounted = 0; int failed = 0; int ret; if (lstat(mnt->me_dir, &st) < 0) die(2, _("Cannot stat mountpoint %s: %s\n"), mnt->me_dir, strerror(errno)); if (!S_ISDIR(st.st_mode)) die(2, _("Mountpoint %s is not a directory?!\n"), mnt->me_dir); cur_dev = st.st_dev; files_done = dirs_done = 0; /* * For gfs2, we scan the fs first and then tell the kernel about the new usage. * So, there's no need to load any information. We also don't remount the * filesystem read-only because for a clustering filesystem it won't stop * modifications from other nodes anyway. */ if (cfmt == QF_XFS) goto start_scan; if (ucheck) { ret = process_file(mnt, USRQUOTA); if (ret < 0) { failed |= ret; ucheck = 0; } } if (gcheck) { ret = process_file(mnt, GRPQUOTA); if (ret < 0) { failed |= ret; gcheck = 0; } } if (!ucheck && !gcheck) /* Nothing to check? */ return failed; if (!(flags & FL_NOREMOUNT)) { /* Now we try to remount fs read-only to prevent races when scanning filesystem */ if (mount (NULL, mnt->me_dir, mnt->me_type, MS_MGC_VAL | MS_REMOUNT | MS_RDONLY, NULL) < 0 && !(flags & FL_FORCEREMOUNT)) { if (flags & FL_INTERACTIVE) { printf(_("Cannot remount filesystem mounted on %s read-only. Counted values might not be right.\n"), mnt->me_dir); if (!ask_yn(_("Should I continue?"), 0)) { printf(_("As you wish... Canceling check of this file.\n")); failed = -1; goto out; } } else { errstr(_("Cannot remount filesystem mounted on %s read-only so counted values might not be right.\n\ Please stop all programs writing to filesystem or use -m flag to force checking.\n"), mnt->me_dir); failed = -1; goto out; } } else remounted = 1; debug(FL_DEBUG, _("Filesystem remounted read-only\n")); } start_scan: debug(FL_VERBOSE | FL_DEBUG, _("Scanning %s [%s] "), mnt->me_devname, mnt->me_dir); #if defined(EXT2_DIRECT) if (!strcmp(mnt->me_type, MNTTYPE_EXT2) || !strcmp(mnt->me_type, MNTTYPE_EXT3) || !strcmp(mnt->me_type, MNTTYPE_NEXT3) || !strcmp(mnt->me_type, MNTTYPE_EXT4)) { ret = ext2_direct_scan(mnt->me_devname); if (ret < 0) { failed |= ret; goto out; } } else { #else if (mnt->me_dir) { #endif if (flags & FL_VERYVERBOSE) putchar('\n'); ret = scan_dir(mnt->me_dir); if (ret < 0) { failed |= ret; goto out; } } dirs_done++; if (flags & FL_VERBOSE || flags & FL_DEBUG) fputs(_("done\n"), stdout); if (ucheck) { failed |= sub_quota_file(mnt, USRQUOTA, USRQUOTA); failed |= sub_quota_file(mnt, USRQUOTA, GRPQUOTA); } if (gcheck) { failed |= sub_quota_file(mnt, GRPQUOTA, USRQUOTA); failed |= sub_quota_file(mnt, GRPQUOTA, GRPQUOTA); } debug(FL_DEBUG | FL_VERBOSE, _("Checked %d directories and %d files\n"), dirs_done, files_done); if (remounted) { if (mount(NULL, mnt->me_dir, mnt->me_type, MS_MGC_VAL | MS_REMOUNT, NULL) < 0) die(4, _("Cannot remount filesystem %s read-write. cannot write new quota files.\n"), mnt->me_dir); debug(FL_DEBUG, _("Filesystem remounted RW.\n")); } if (ucheck) failed |= dump_to_file(mnt, USRQUOTA); if (gcheck) failed |= dump_to_file(mnt, GRPQUOTA); out: remove_list(); return failed; } /* Detect quota format from filename of present files */ static int detect_filename_format(struct mount_entry *mnt, int type) { char *option; struct stat statbuf; char namebuf[PATH_MAX]; int journal = 0; int fmt; if (strcmp(mnt->me_type, MNTTYPE_XFS) == 0 || strcmp(mnt->me_type, MNTTYPE_GFS2) == 0 || strcmp(mnt->me_type, MNTTYPE_EXFS) == 0) return QF_XFS; if (type == USRQUOTA) { if ((option = str_hasmntopt(mnt->me_opts, MNTOPT_USRQUOTA))) option += strlen(MNTOPT_USRQUOTA); else if ((option = str_hasmntopt(mnt->me_opts, MNTOPT_USRJQUOTA))) { journal = 1; option += strlen(MNTOPT_USRJQUOTA); } else if ((option = str_hasmntopt(mnt->me_opts, MNTOPT_QUOTA))) option += strlen(MNTOPT_QUOTA); } else { if ((option = str_hasmntopt(mnt->me_opts, MNTOPT_GRPQUOTA))) option += strlen(MNTOPT_GRPQUOTA); else if ((option = str_hasmntopt(mnt->me_opts, MNTOPT_GRPJQUOTA))) { journal = 1; option += strlen(MNTOPT_GRPJQUOTA); } } if (!option) die(2, _("Cannot find quota option on filesystem %s with quotas!\n"), mnt->me_dir); if (journal) { char fmtbuf[64], *space; if (!(option = str_hasmntopt(mnt->me_opts, MNTOPT_JQFMT))) { jquota_err: errstr(_("Cannot detect quota format for journalled quota on %s\n"), mnt->me_dir); return -1; } option += strlen(MNTOPT_JQFMT); if (*option != '=') goto jquota_err; space = strchr(option, ','); if (!space) space = option + strlen(option); if (space-option > sizeof(fmtbuf)) goto jquota_err; sstrncpy(fmtbuf, option+1, space-option); fmt = name2fmt(fmtbuf); if (fmt == QF_ERROR) goto jquota_err; return fmt; } else if (*option == '=') /* If the file name is specified we can't detect quota format from it... */ return -1; snprintf(namebuf, PATH_MAX, "%s/%s.%s", mnt->me_dir, basenames[QF_VFSV0], extensions[type]); if (!stat(namebuf, &statbuf)) { int fd = open(namebuf, O_RDONLY); if (fd < 0) return -1; fmt = v2_detect_version(namebuf, fd, type); close(fd); return fmt; } if (errno != ENOENT) return -1; snprintf(namebuf, PATH_MAX, "%s/%s.%s", mnt->me_dir, basenames[QF_VFSOLD], extensions[type]); if (!stat(namebuf, &statbuf)) return QF_VFSOLD; /* Old quota files don't exist, just create VFSv0 format if available */ if (kern_qfmt_supp(QF_VFSV0)) return QF_VFSV0; if (kern_qfmt_supp(QF_VFSOLD)) return QF_VFSOLD; return -1; } static int compatible_fs_qfmt(char *fstype, int fmt) { /* We never check XFS, NFS, and filesystems supporting VFS metaformat */ if (!strcmp(fstype, MNTTYPE_XFS) || nfs_fstype(fstype) || meta_qf_fstype(fstype) || !strcmp(fstype, MNTTYPE_EXFS)) return 0; /* In all other cases we can pick a format... */ if (fmt == -1) return 1; /* XFS format is supported only by GFS2 */ if (fmt == QF_XFS) return !strcmp(fstype, MNTTYPE_GFS2); /* Anything but GFS2 supports all other formats */ return !!strcmp(fstype, MNTTYPE_GFS2); } /* Parse kernel version and return 1 if journaled quota is supported */ static int kernel_supports_jquota(void) { struct utsname stats; int v; char *errch; if (uname(&stats) < 0) { errstr(_("Cannot get system info: %s\n"), strerror(errno)); return 0; } if (strcmp(stats.sysname, "Linux")) return 0; v = strtol(stats.release, &errch, 10); if (v < 2) return 0; if (v >= 3) return 1; if (*errch != '.') return 0; v = strtol(errch + 1, &errch, 10); if (*errch != '.' || v < 6) return 0; v = strtol(errch + 1, &errch, 10); if (v < 11) return 0; return 1; } /* Return 0 in case of success, non-zero otherwise. */ static int check_all(void) { struct mount_entry *mnt; int checked = 0; static int warned; int failed = 0; if (init_mounts_scan((flags & FL_ALL) ? 0 : 1, &mntpoint, 0) < 0) die(2, _("Cannot initialize mountpoint scan.\n")); while ((mnt = get_next_mount())) { if (flags & FL_ALL && flags & FL_NOROOT && !strcmp(mnt->me_dir, "/")) continue; if (!compatible_fs_qfmt(mnt->me_type, fmt)) { debug(FL_DEBUG | FL_VERBOSE, _("Skipping %s [%s]\n"), mnt->me_devname, mnt->me_dir); continue; } cfmt = fmt; if (uwant && me_hasquota(mnt, USRQUOTA) && mnt->me_qfmt[USRQUOTA] != QF_META) ucheck = 1; else ucheck = 0; if (gwant && me_hasquota(mnt, GRPQUOTA) && mnt->me_qfmt[GRPQUOTA] != QF_META) gcheck = 1; else gcheck = 0; if (!ucheck && !gcheck) continue; if (cfmt == -1) { cfmt = detect_filename_format(mnt, ucheck ? USRQUOTA : GRPQUOTA); if (cfmt == -1) { errstr(_("Cannot guess format from filename on %s. Please specify format on commandline.\n"), mnt->me_devname); failed = -1; continue; } debug(FL_DEBUG, _("Detected quota format %s\n"), fmt2name(cfmt)); } if (!warned) { if (!strcmp(mnt->me_type, MNTTYPE_EXT4) && ext4_supports_quota_feature()) { warned = 1; errstr(_("Your kernel probably supports ext4 " "quota feature but you are using " "external quota files. Please switch " "your filesystem to use ext4 quota " "feature as external quota files on " "ext4 are deprecated. You can enable " "the feature by unmounting the file " "system and running 'tune2fs -O quota " "<device>'.\n")); } else if (!str_hasmntopt(mnt->me_opts, MNTOPT_USRJQUOTA) && !str_hasmntopt(mnt->me_opts, MNTOPT_GRPJQUOTA) && (!strcmp(mnt->me_type, MNTTYPE_EXT3) || !strcmp(mnt->me_type, MNTTYPE_EXT4) || !strcmp(mnt->me_type, MNTTYPE_NEXT3) || !strcmp(mnt->me_type, MNTTYPE_EXT4DEV) || !strcmp(mnt->me_type, MNTTYPE_REISER)) && kernel_supports_jquota()) { warned = 1; errstr(_("Your kernel probably supports " "journaled quota but you are not " "using it. Consider switching to " "journaled quota to avoid running " "quotacheck after an unclean shutdown.\n")); } } checked++; failed |= check_dir(mnt); } end_mounts_scan(); if (!checked && (!(flags & FL_ALL) || flags & (FL_VERBOSE | FL_DEBUG))) { errstr(_("Cannot find filesystem to check or filesystem not mounted with quota option.\n")); failed = -1; } return failed; } int main(int argc, char **argv) { int failed; gettexton(); progname = basename(argv[0]); parse_options(argc, argv); init_kernel_interface(); failed = check_all(); #ifdef DEBUG_MALLOC errstr(_("Allocated %d bytes memory\nFree'd %d bytes\nLost %d bytes\n"), malloc_mem, free_mem, malloc_mem - free_mem); #endif return (failed ? EXIT_FAILURE : EXIT_SUCCESS); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotacheck.h�����������������������������������������������������������������������������0000664�0000000�0000000�00000003242�14463210551�0015101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Header file for quota checking utilities * */ #ifndef GUARD_QUOTACHECK_H #define GUARD_QUOTACHECK_H #include <sys/types.h> #include "quota.h" #include "quotaio.h" #define NODQUOT ((struct dquot *)NULL) #define FL_FORCE 1 /* Force check even if quota enabled */ #define FL_VERBOSE 2 /* Have verbose input */ #define FL_DEBUG 4 /* Have very verbose input */ #define FL_INTERACTIVE 8 /* Ask questions when needed */ #define FL_GUESSDQ 16 /* When more structures for same user found, use the first */ #define FL_NEWFILE 32 /* Don't try to read old file. Just create new one. */ #define FL_FORCEREMOUNT 64 /* Force check even when remounting RO fails */ #define FL_NOREMOUNT 128 /* Don't try to remount filesystem RO */ #define FL_ALL 256 /* Scan all mountpoints with quota? */ #define FL_NOROOT 512 /* Scan all mountpoints except root */ #define FL_BACKUPS 1024 /* Create backup of old quota file? */ #define FL_VERYVERBOSE 2048 /* Print directory names when checking */ extern int flags; /* Options from command line */ extern struct util_dqinfo old_info[MAXQUOTAS]; /* Loaded info from file */ #ifdef DEBUG_MALLOC extern size_t malloc_mem = 0; extern size_t free_mem = 0; #endif void *xmalloc(size_t size); void debug(int df, char *fmtstr, ...) __attribute__ ((__format__ (__printf__, 2, 3))); int ask_yn(char *q, int def); struct dquot *lookup_dquot(qid_t id, int type); struct dquot *add_dquot(qid_t id, int type); int v2_detect_version(char *filename, int fd, int type); int v2_buffer_file(char *filename, int fd, int type, int version); int v1_buffer_file(char *filename, int fd, int type); void v2_merge_info(struct util_dqinfo *new, struct util_dqinfo *old); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotacheck_v1.c��������������������������������������������������������������������������0000664�0000000�0000000�00000004320�14463210551�0015500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Checking routines for old VFS quota format * */ #include "config.h" #include <stdio.h> #include <unistd.h> #include <string.h> #include <errno.h> #include "pot.h" #include "common.h" #include "quotaio.h" #include "quotaio_v1.h" #include "quotacheck.h" /* Load all other dquot structures */ static void load_dquots(char *filename, int fd, int type) { struct v1_disk_dqblk ddqblk; struct util_dqblk *udq; struct dquot *dquot; int err; qid_t id = 0; lseek(fd, 0, SEEK_SET); while ((err = read(fd, &ddqblk, sizeof(ddqblk)))) { if (err < 0) die(1, _("Cannot read entry for id %u from quotafile %s: %s\n"), (uint) id, filename, strerror(errno)); if (err != sizeof(ddqblk)) { errstr(_("Entry for id %u is truncated.\n"), (uint) id); break; } if (ddqblk.dqb_bhardlimit == 0 && ddqblk.dqb_bsoftlimit == 0 && ddqblk.dqb_ihardlimit == 0 && ddqblk.dqb_isoftlimit == 0) { id++; continue; } dquot = add_dquot(id, type); udq = &dquot->dq_dqb; udq->dqb_bhardlimit = ddqblk.dqb_bhardlimit; udq->dqb_bsoftlimit = ddqblk.dqb_bsoftlimit; udq->dqb_ihardlimit = ddqblk.dqb_ihardlimit; udq->dqb_isoftlimit = ddqblk.dqb_isoftlimit; udq->dqb_btime = ddqblk.dqb_btime; udq->dqb_itime = ddqblk.dqb_itime; id++; } } /* Load first structure - get grace times */ static int check_info(char *filename, int fd, int type) { struct v1_disk_dqblk ddqblk; int err; debug(FL_DEBUG, _("Loading first quota entry with grace times.\n")); lseek(fd, 0, SEEK_SET); err = read(fd, &ddqblk, sizeof(ddqblk)); if (err < 0) die(1, _("Cannot read first entry from quotafile %s: %s\n"), filename, strerror(errno)); if (err != sizeof(ddqblk)) { errstr( _("WARNING - Quotafile %s was probably truncated. Cannot save quota settings...\n"), filename); return -1; } old_info[type].dqi_bgrace = ddqblk.dqb_btime; old_info[type].dqi_igrace = ddqblk.dqb_itime; debug(FL_DEBUG, _("First entry loaded.\n")); return 0; } int v1_buffer_file(char *filename, int fd, int type) { old_info[type].dqi_bgrace = MAX_DQ_TIME; old_info[type].dqi_igrace = MAX_IQ_TIME; if (flags & FL_NEWFILE) return 0; if (check_info(filename, fd, type) < 0) return 0; load_dquots(filename, fd, type); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotacheck_v2.c��������������������������������������������������������������������������0000664�0000000�0000000�00000033042�14463210551�0015504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Checking routines for new VFS quota format * */ #include "config.h" #include <stdio.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <stdarg.h> #include <stdlib.h> #include <endian.h> #include "pot.h" #include "common.h" #include "quota.h" #include "quotaio.h" #include "quotaio_v2.h" #include "quotacheck.h" #include "quota_tree.h" #define getdqbuf() smalloc(QT_BLKSIZE) #define freedqbuf(buf) free(buf) #define SET_BLK(blk) (blkbmp[(blk) >> 3] |= 1 << ((blk) & 7)) #define GET_BLK(blk) (blkbmp[(blk) >> 3] & (1 << ((blk) & 7))) typedef char *dqbuf_t; static const int magics[MAXQUOTAS] = INITQMAGICS; /* Magics we should look for */ static const int known_versions[MAXQUOTAS] = INIT_V2_VERSIONS; /* Versions we accept */ static char *blkbmp; /* Bitmap of checked blocks */ static int detected_versions[MAXQUOTAS]; static int check_blkref(uint blk, uint blocks) { if (blk >= blocks) return -1; if (blk && blk < QT_TREEOFF) return -1; return 0; } /* Load and check basic info about quotas */ static int check_info(char *filename, int fd, int type) { struct v2_disk_dqinfo dinfo; uint blocks, dflags, freeblk, freeent; off_t filesize; int err; debug(FL_DEBUG, _("Checking quotafile info...\n")); lseek(fd, V2_DQINFOOFF, SEEK_SET); err = read(fd, &dinfo, sizeof(struct v2_disk_dqinfo)); if (err < 0) { errstr(_("Cannot read info from quota file %s: %s\n"), filename, strerror(errno)); return -1; } if (err != sizeof(struct v2_disk_dqinfo)) { errstr(_("WARNING - Quota file %s was probably truncated. Cannot save quota settings...\n"), filename); return -1; } blocks = le32toh(dinfo.dqi_blocks); freeblk = le32toh(dinfo.dqi_free_blk); freeent = le32toh(dinfo.dqi_free_entry); dflags = le32toh(dinfo.dqi_flags); filesize = lseek(fd, 0, SEEK_END); if (check_blkref(freeblk, blocks) < 0 || dflags & ~V2_DQF_MASK || check_blkref(freeent, blocks) < 0 || (filesize + QT_BLKSIZE - 1) >> QT_BLKSIZE_BITS != blocks) { errstr(_("WARNING - Quota file info was corrupted.\n")); debug(FL_DEBUG, _("Size of file: %lu\nBlocks: %u Free block: %u Block with free entry: %u Flags: %x\n"), (unsigned long)filesize, blocks, freeblk, freeent, dflags); old_info[type].dqi_bgrace = MAX_DQ_TIME; old_info[type].dqi_igrace = MAX_IQ_TIME; old_info[type].u.v2_mdqi.dqi_qtree.dqi_blocks = (filesize + QT_BLKSIZE - 1) >> QT_BLKSIZE_BITS; old_info[type].u.v2_mdqi.dqi_flags = 0; printf(_("Setting grace times and other flags to default values.\nAssuming number of blocks is %u.\n"), old_info[type].u.v2_mdqi.dqi_qtree.dqi_blocks); } else { old_info[type].dqi_bgrace = le32toh(dinfo.dqi_bgrace); old_info[type].dqi_igrace = le32toh(dinfo.dqi_igrace); old_info[type].u.v2_mdqi.dqi_qtree.dqi_blocks = blocks; old_info[type].u.v2_mdqi.dqi_flags = dflags; } if (detected_versions[type] == 0) old_info[type].u.v2_mdqi.dqi_qtree.dqi_entry_size = sizeof(struct v2r0_disk_dqblk); else if (detected_versions[type] == 1) old_info[type].u.v2_mdqi.dqi_qtree.dqi_entry_size = sizeof(struct v2r1_disk_dqblk); /* Won't be needed */ old_info[type].u.v2_mdqi.dqi_qtree.dqi_free_blk = 0; old_info[type].u.v2_mdqi.dqi_qtree.dqi_free_entry = 0; debug(FL_DEBUG, _("File info done.\n")); return 0; } /* Print errstr message */ static void blk_corrupted(int *corrupted, uint * lblk, uint blk, char *fmtstr, ...) { va_list args; if (!*corrupted) { if (!(flags & (FL_VERBOSE | FL_DEBUG))) errstr(_("Corrupted blocks: ")); } if (flags & (FL_VERBOSE | FL_DEBUG)) { va_start(args, fmtstr); errstr(_("Block %u: "), blk); vfprintf(stderr, fmtstr, args); fputc('\n', stderr); va_end(args); } else if (*lblk != blk) { if (!*corrupted) fprintf(stderr, "%u", blk); else fprintf(stderr, ", %u", blk); } *corrupted = 1; *lblk = blk; fflush(stderr); } /* Convert dist quota format to utility one - copy just needed fields */ static void v2r0_disk2utildqblk(struct util_dqblk *u, struct v2r0_disk_dqblk *d) { u->dqb_ihardlimit = le32toh(d->dqb_ihardlimit); u->dqb_isoftlimit = le32toh(d->dqb_isoftlimit); u->dqb_bhardlimit = le32toh(d->dqb_bhardlimit); u->dqb_bsoftlimit = le32toh(d->dqb_bsoftlimit); u->dqb_itime = le64toh(d->dqb_itime); u->dqb_btime = le64toh(d->dqb_btime); } /* Convert dist quota format to utility one - copy just needed fields */ static void v2r1_disk2utildqblk(struct util_dqblk *u, struct v2r1_disk_dqblk *d) { u->dqb_ihardlimit = le64toh(d->dqb_ihardlimit); u->dqb_isoftlimit = le64toh(d->dqb_isoftlimit); u->dqb_bhardlimit = le64toh(d->dqb_bhardlimit); u->dqb_bsoftlimit = le64toh(d->dqb_bsoftlimit); u->dqb_itime = le64toh(d->dqb_itime); u->dqb_btime = le64toh(d->dqb_btime); } /* Put one entry info memory */ static int buffer_entry(dqbuf_t buf, uint blk, int *corrupted, uint * lblk, int cnt, int type) { struct util_dqblk *fdq, mdq; qid_t id; struct dquot *cd; struct qtree_mem_dqinfo *info = &old_info[type].u.v2_mdqi.dqi_qtree; char *ddq = (char *)buf + sizeof(struct qt_disk_dqdbheader) + cnt * info->dqi_entry_size; if (detected_versions[type] == 0) { v2r0_disk2utildqblk(&mdq, (struct v2r0_disk_dqblk *)ddq); id = le32toh(((struct v2r0_disk_dqblk *)ddq)->dqb_id); } else { v2r1_disk2utildqblk(&mdq, (struct v2r1_disk_dqblk *)ddq); id = le32toh(((struct v2r1_disk_dqblk *)ddq)->dqb_id); } cd = lookup_dquot(id, type); if (cd != NODQUOT) { fdq = &cd->dq_dqb; if (mdq.dqb_bhardlimit != fdq->dqb_bhardlimit || mdq.dqb_bsoftlimit != fdq->dqb_bsoftlimit || mdq.dqb_ihardlimit != fdq->dqb_ihardlimit || mdq.dqb_isoftlimit != fdq->dqb_isoftlimit) { blk_corrupted(corrupted, lblk, blk, _("Duplicated entries.")); if (flags & FL_GUESSDQ) { if (!(flags & (FL_DEBUG | FL_VERBOSE))) fputc('\n', stderr); errstr(_("Found more structures for ID %u. Using values: BHARD: %lld BSOFT: %lld IHARD: %lld ISOFT: %lld\n"), (uint) id, (long long)fdq->dqb_bhardlimit, (long long)fdq->dqb_bsoftlimit, (long long)fdq->dqb_ihardlimit, (long long)fdq->dqb_isoftlimit); return 0; } else if (flags & FL_INTERACTIVE) { if (!(flags & (FL_DEBUG | FL_VERBOSE))) fputc('\n', stderr); errstr(_("Found more structures for ID %u. Values: BHARD: %lld/%lld BSOFT: %lld/%lld IHARD: %lld/%lld ISOFT: %lld/%lld\n"), (uint) id, (long long)fdq->dqb_bhardlimit, (long long)mdq.dqb_bhardlimit, (long long)fdq->dqb_bsoftlimit, (long long)mdq.dqb_bsoftlimit, (long long)fdq->dqb_ihardlimit, (long long)mdq.dqb_ihardlimit, (long long)fdq->dqb_isoftlimit, (long long)mdq.dqb_isoftlimit); if (ask_yn(_("Should I use new values?"), 0)) { fdq->dqb_bhardlimit = mdq.dqb_bhardlimit; fdq->dqb_bsoftlimit = mdq.dqb_bsoftlimit; fdq->dqb_ihardlimit = mdq.dqb_ihardlimit; fdq->dqb_isoftlimit = mdq.dqb_isoftlimit; fdq->dqb_btime = mdq.dqb_btime; fdq->dqb_itime = mdq.dqb_itime; } } else { errstr(_("ID %u has more structures. User intervention needed (use -i for interactive mode or -n for automatic answer).\n"), (uint) id); return -1; } } else if (mdq.dqb_itime != fdq->dqb_itime || mdq.dqb_btime != fdq->dqb_btime) { if (fdq->dqb_btime < mdq.dqb_btime) fdq->dqb_btime = mdq.dqb_btime; if (fdq->dqb_itime < mdq.dqb_itime) fdq->dqb_itime = mdq.dqb_itime; } } else { cd = add_dquot(id, type); fdq = &cd->dq_dqb; fdq->dqb_bhardlimit = mdq.dqb_bhardlimit; fdq->dqb_bsoftlimit = mdq.dqb_bsoftlimit; fdq->dqb_ihardlimit = mdq.dqb_ihardlimit; fdq->dqb_isoftlimit = mdq.dqb_isoftlimit; /* Add grace times only if there are limits... */ if (mdq.dqb_bsoftlimit) fdq->dqb_btime = mdq.dqb_btime; if (mdq.dqb_isoftlimit) fdq->dqb_itime = mdq.dqb_itime; } return 0; } static void check_read_blk(int fd, uint blk, dqbuf_t buf) { ssize_t rd; lseek(fd, blk << QT_BLKSIZE_BITS, SEEK_SET); rd = read(fd, buf, QT_BLKSIZE); if (rd < 0) die(2, _("Cannot read block %u: %s\n"), blk, strerror(errno)); if (rd != QT_BLKSIZE) { debug(FL_VERBOSE | FL_DEBUG, _("Block %u is truncated.\n"), blk); memset(buf + rd, 0, QT_BLKSIZE - rd); } } static int check_tree_ref(uint blk, uint ref, uint blocks, int check_use, int * corrupted, uint * lblk) { if (check_blkref(ref, blocks) < 0) { blk_corrupted(corrupted, lblk, blk, _("Reference to illegal block %u"), ref); return -1; } if (!ref) return 0; if (!check_use || !GET_BLK(ref)) return 0; blk_corrupted(corrupted, lblk, blk, _("Block %u in tree referenced twice"), ref); return -1; } /* Check block with structures */ static int check_data_blk(int fd, uint blk, int type, uint blocks, int * corrupted, uint * lblk) { dqbuf_t buf = getdqbuf(); struct qt_disk_dqdbheader *head = (struct qt_disk_dqdbheader *)buf; int i; char *dd = (char *)(head + 1); struct qtree_mem_dqinfo *info = &old_info[type].u.v2_mdqi.dqi_qtree; SET_BLK(blk); check_read_blk(fd, blk, buf); if (check_blkref(le32toh(head->dqdh_next_free), blocks) < 0) blk_corrupted(corrupted, lblk, blk, _("Illegal free block reference to block %u"), le32toh(head->dqdh_next_free)); if (le16toh(head->dqdh_entries) > qtree_dqstr_in_blk(info)) blk_corrupted(corrupted, lblk, blk, _("Corrupted number of used entries (%u)"), (uint) le16toh(head->dqdh_entries)); for (i = 0; i < qtree_dqstr_in_blk(info); i++) if (!qtree_entry_unused(info, dd + i * info->dqi_entry_size)) if (buffer_entry(buf, blk, corrupted, lblk, i, type) < 0) { freedqbuf(buf); return -1; } freedqbuf(buf); return 0; } /* Check one tree block */ static int check_tree_blk(int fd, uint blk, int depth, int type, uint blocks, int * corrupted, uint * lblk) { dqbuf_t buf = getdqbuf(); u_int32_t *r = (u_int32_t *) buf; int i; SET_BLK(blk); check_read_blk(fd, blk, buf); for (i = 0; i < QT_BLKSIZE >> 2; i++) if (depth < QT_TREEDEPTH - 1) { if (check_tree_ref(blk, le32toh(r[i]), blocks, 1, corrupted, lblk) >= 0 && le32toh(r[i])) /* Isn't block OK? */ if (check_tree_blk(fd, le32toh(r[i]), depth + 1, type, blocks, corrupted, lblk) < 0) { freedqbuf(buf); return -1; } } else if (check_tree_ref(blk, le32toh(r[i]), blocks, 0, corrupted, lblk) >= 0 && le32toh(r[i])) if (!GET_BLK(le32toh(r[i])) && check_data_blk(fd, le32toh(r[i]), type, blocks, corrupted, lblk) < 0) { freedqbuf(buf); return -1; } freedqbuf(buf); return 0; } int v2_detect_version(char *filename, int fd, int type) { struct v2_disk_dqheader head; int err; int ver; lseek(fd, 0, SEEK_SET); err = read(fd, &head, sizeof(head)); if (err < 0 || err != sizeof(head)) return -1; if (le32toh(head.dqh_magic) != magics[type] || le32toh(head.dqh_version) > known_versions[type]) { errstr(_("Quota file %s has corrupted headers. You have to specify quota format on command line.\n"), filename); return -1; } ver = le32toh(head.dqh_version); if (ver == 0) return QF_VFSV0; return QF_VFSV1; } /* Check basic header */ static int check_header(char *filename, int fd, int type, int version) { int err; struct v2_disk_dqheader head; debug(FL_DEBUG, _("Checking quotafile headers...\n")); lseek(fd, 0, SEEK_SET); err = read(fd, &head, sizeof(head)); if (err < 0) die(1, _("Cannot read header from quotafile %s: %s\n"), filename, strerror(errno)); if (err != sizeof(head)) { errstr(_("WARNING - Quotafile %s was probably truncated. Cannot save quota settings...\n"), filename); return -1; } if (le32toh(head.dqh_magic) != magics[type] || le32toh(head.dqh_version) > known_versions[type]) { errstr(_("WARNING - Quota file %s has corrupted headers\n"), filename); if (!(flags & FL_INTERACTIVE) || !ask_yn(_("Continue checking assuming format from command line?"), 0)) return -1; } if (le32toh(head.dqh_version) != version) { errstr(_("Quota file format version %d does not match the one " "specified on command line (%d). Quota file header " "may be corrupted.\n"), le32toh(head.dqh_version), version); if (!(flags & FL_INTERACTIVE) || !ask_yn(_("Continue checking assuming version from command line?"), 1)) return -1; detected_versions[type] = version; } else detected_versions[type] = le32toh(head.dqh_version); debug(FL_DEBUG, _("Headers checked.\n")); return 0; } /* Load data from file to memory */ int v2_buffer_file(char *filename, int fd, int type, int fmt) { uint blocks, lastblk = 0; int corrupted = 0, ret = 0; int version; if (fmt == QF_VFSV0) version = 0; else if (fmt == QF_VFSV1) version = 1; else die(3, _("Do not know how to buffer format %d\n"), fmt); old_info[type].dqi_bgrace = MAX_DQ_TIME; old_info[type].dqi_igrace = MAX_IQ_TIME; if (flags & FL_NEWFILE) return 0; if (check_header(filename, fd, type, version) < 0) return -1; if (check_info(filename, fd, type) < 0) return -1; debug(FL_DEBUG, _("Headers of file %s checked. Going to load data...\n"), filename); blocks = old_info[type].u.v2_mdqi.dqi_qtree.dqi_blocks; blkbmp = xmalloc((blocks + 7) >> 3); memset(blkbmp, 0, (blocks + 7) >> 3); if (check_tree_ref(0, QT_TREEOFF, blocks, 1, &corrupted, &lastblk) >= 0) ret = check_tree_blk(fd, QT_TREEOFF, 0, type, blocks, &corrupted, &lastblk); else errstr(_("Cannot gather quota data. Tree root node corrupted.\n")); #ifdef DEBUG_MALLOC free_mem += (blocks + 7) >> 3; #endif free(blkbmp); if (corrupted) { if (!(flags & (FL_VERBOSE | FL_DEBUG))) fputc('\n', stderr); errstr(_("WARNING - Some data might be changed due to corruption.\n")); } else debug(FL_DEBUG, _("Not found any corrupted blocks. Congratulations.\n")); return ret; } /* Merge quotafile info from old and new file */ void v2_merge_info(struct util_dqinfo *new, struct util_dqinfo *old) { new->u.v2_mdqi.dqi_flags = old->u.v2_mdqi.dqi_flags; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotagrpadmins���������������������������������������������������������������������������0000664�0000000�0000000�00000000334�14463210551�0015561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # This is a sample groupadmins file (/etc/quotagrpadmins) # # Comments begin with hash in the beginning of the line # In this file you specify users responsible for space used by the group users: root mygroup: chief ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotagrpadmins.5�������������������������������������������������������������������������0000664�0000000�0000000�00000001237�14463210551�0015727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH QUOTAGRPADMINS 5 .SH NAME quotagrpadmins \- users responsible for group disk usage .SH SYNOPSIS .B /etc/quotagrpadmins .SH DESCRIPTION The .B quotagrpadmins file lists administrators of user groups who will receive a warning if .B warnquota --group command finds a group exceeding its disk usage limits. .P Each line consists of a group name followed by a colon and a user name. White space characters surrounding the names are allowed. Empty lines or lines starting with a hash sign or a semicolon are ignored. .SH EXAMPLE .PP # comment .RS 0 users: root .SH FILES .PD 0 .TP 20 .B /etc/quotagrpadmins list of group administrators .PD .SH SEE ALSO .BR warnquota (8). �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio.c��������������������������������������������������������������������������������0000664�0000000�0000000�00000020225�14463210551�0014426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Generic IO operations on quotafiles * * Jan Kara <jack@suse.cz> - sponsored by SuSE CR */ #include "config.h" #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/file.h> #include <endian.h> #include "pot.h" #include "bylabel.h" #include "common.h" #include "quotasys.h" #include "quotaio.h" #include "dqblk_v1.h" #include "dqblk_v2.h" #include "dqblk_rpc.h" #include "dqblk_xfs.h" /* Header in all newer quotafiles */ struct disk_dqheader { u_int32_t dqh_magic; u_int32_t dqh_version; } __attribute__ ((packed)); /* * Detect quota format and initialize quota IO */ struct quota_handle *init_io(struct mount_entry *mnt, int type, int fmt, int flags) { char *qfname = NULL; int fd = -1, kernfmt; struct quota_handle *h = smalloc(sizeof(struct quota_handle)); int nameflag; if (!me_hasquota(mnt, type)) goto out_handle; if (stat(mnt->me_devname, &h->qh_stat) < 0) memset(&h->qh_stat, 0, sizeof(struct stat)); h->qh_io_flags = 0; if (flags & IOI_READONLY) h->qh_io_flags |= IOFL_RO; if (flags & IOI_NFS_MIXED_PATHS) h->qh_io_flags |= IOFL_NFS_MIXED_PATHS; h->qh_type = type; sstrncpy(h->qh_quotadev, mnt->me_devname, sizeof(h->qh_quotadev)); sstrncpy(h->qh_fstype, mnt->me_type, MAX_FSTYPE_LEN); sstrncpy(h->qh_dir, mnt->me_dir, PATH_MAX); if (nfs_fstype(mnt->me_type)) { /* NFS filesystem? */ if (fmt != -1 && fmt != QF_RPC) { /* User wanted some other format? */ errstr(_("Only RPC quota format is allowed on NFS filesystem.\n")); goto out_handle; } #ifdef RPC h->qh_fd = -1; h->qh_fmt = QF_RPC; h->qh_ops = "afile_ops_rpc; memset(&h->qh_info, 0, sizeof(h->qh_info)); h->qh_ops->init_io(h); return h; #else errstr(_("RPC quota format not compiled.\n")); goto out_handle; #endif } else if (fmt == QF_RPC) { errstr(_("RPC quota format specified for non-NFS filesystem.\n")); goto out_handle; } if (!strcmp(mnt->me_type, MNTTYPE_XFS) || /* XFS filesystem? */ !strcmp(mnt->me_type, MNTTYPE_GFS2) || /* XFS filesystem? */ !strcmp(mnt->me_type, MNTTYPE_EXFS)) { /* EXFS filesystem? */ if (fmt != -1 && fmt != QF_XFS) { /* User wanted some other format? */ errstr(_("Only XFS quota format is allowed on XFS filesystem.\n")); goto out_handle; } h->qh_fd = -1; h->qh_fmt = QF_XFS; h->qh_ops = "afile_ops_xfs; memset(&h->qh_info, 0, sizeof(h->qh_info)); h->qh_ops->init_io(h); return h; } else if (fmt == QF_XFS) { errstr(_("XFS quota allowed only on XFS filesystem.\n")); goto out_handle; } if (kern_qfmt_supp(fmt)) { /* Quota compiled and desired format available? */ /* Quota turned on? */ kernfmt = kern_quota_on(mnt, type, fmt); if (kernfmt >= 0) { h->qh_io_flags |= IOFL_QUOTAON; fmt = kernfmt; /* Default is kernel used format */ } } if (meta_qf_fstype(mnt->me_type) || mnt->me_qfmt[type] == QF_META) { if (!QIO_ENABLED(h)) { errstr(_("Quota not supported by the filesystem.\n")); goto out_handle; } h->qh_fd = -1; h->qh_fmt = fmt; goto set_ops; } nameflag = (!QIO_ENABLED(h) || flags & IOI_INITSCAN) ? NF_FORMAT : 0; if (fmt == -1) { /* Let's try any VFSv0 quota format... */ if (get_qf_name(mnt, type, QF_VFSV0, nameflag, &qfname) >= 0) fmt = QF_VFSV0; /* And then VFSv1 quota format... */ else if (get_qf_name(mnt, type, QF_VFSV1, nameflag, &qfname) >= 0) fmt = QF_VFSV1; /* And then old quota format... */ else if (get_qf_name(mnt, type, QF_VFSOLD, nameflag, &qfname) >= 0) fmt = QF_VFSOLD; else { /* Don't know... */ errstr(_("Cannot find any quota file to work on.\n")); goto out_handle; } } else { if (get_qf_name(mnt, type, fmt, nameflag, &qfname) < 0) { errstr(_("Quota file not found or has wrong format.\n")); goto out_handle; } } if (!QIO_ENABLED(h) || flags & IOI_INITSCAN) { /* Need to open file? */ if (QIO_ENABLED(h)) { /* Kernel uses same file? */ unsigned int cmd = (kernel_iface == IFACE_GENERIC) ? Q_SYNC : Q_6_5_SYNC; if (quotactl(QCMD(cmd, h->qh_type), h->qh_quotadev, 0, NULL) < 0) { die(4, _("Cannot sync quotas on device %s: %s\n"), h->qh_quotadev, strerror(errno)); } } /* We still need to open file for operations like 'repquota' */ if ((fd = open(qfname, QIO_RO(h) ? O_RDONLY : O_RDWR)) < 0) { errstr(_("Cannot open quotafile %s: %s\n"), qfname, strerror(errno)); goto out_handle; } flock(fd, QIO_RO(h) ? LOCK_SH : LOCK_EX); /* Init handle */ h->qh_fd = fd; h->qh_fmt = fmt; } else { h->qh_fd = -1; h->qh_fmt = fmt; } free(qfname); /* We don't need it anymore */ qfname = NULL; set_ops: if (fmt == QF_VFSOLD) h->qh_ops = "afile_ops_1; else if (is_tree_qfmt(fmt)) h->qh_ops = "afile_ops_2; else if (fmt == QF_META) h->qh_ops = "afile_ops_meta; memset(&h->qh_info, 0, sizeof(h->qh_info)); if (h->qh_ops->init_io && h->qh_ops->init_io(h) < 0) { errstr(_("Cannot initialize quota on %s: %s\n"), h->qh_quotadev, strerror(errno)); goto out_lock; } return h; out_lock: if (fd != -1) flock(fd, LOCK_UN); out_handle: if (qfname) free(qfname); free(h); return NULL; } /* * Create new quotafile of specified format on given filesystem */ struct quota_handle *new_io(struct mount_entry *mnt, int type, int fmt) { char *qfname; int fd; struct quota_handle *h; char namebuf[PATH_MAX]; if (fmt == -1) fmt = QF_VFSV0; else if (fmt == QF_RPC || fmt == QF_XFS) { errstr(_("Creation of %s quota format is not supported.\n"), fmt2name(fmt)); return NULL; } /* * For filesystems which never have quotas in quota files or for * filesystems which have quotas already stored in system files we * refuse to create anything. */ if (meta_qf_fstype(mnt->me_type) || mnt->me_qfmt[type] == QF_META) { errstr(_("Quota on %s is stored in system files and must" " be manipulated by fs tools.\n"), mnt->me_dir); return NULL; } if (get_qf_name(mnt, type, fmt, 0, &qfname) < 0) return NULL; sstrncpy(namebuf, qfname, PATH_MAX); sstrncat(namebuf, ".new", PATH_MAX); free(qfname); if ((fd = open(namebuf, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)) < 0) { errstr(_("Cannot create new quotafile %s: %s\n"), namebuf, strerror(errno)); return NULL; } h = smalloc(sizeof(struct quota_handle)); h->qh_fd = fd; h->qh_io_flags = 0; sstrncpy(h->qh_quotadev, mnt->me_devname, sizeof(h->qh_quotadev)); sstrncpy(h->qh_fstype, mnt->me_type, MAX_FSTYPE_LEN); sstrncpy(h->qh_dir, mnt->me_dir, PATH_MAX); h->qh_type = type; h->qh_fmt = fmt; memset(&h->qh_info, 0, sizeof(h->qh_info)); if (fmt == QF_VFSOLD) h->qh_ops = "afile_ops_1; else h->qh_ops = "afile_ops_2; flock(fd, LOCK_EX); if (h->qh_ops->new_io && h->qh_ops->new_io(h) < 0) { flock(fd, LOCK_UN); free(h); goto out_fd; } return h; out_fd: close(fd); return NULL; } /* * Close quotafile and release handle */ int end_io(struct quota_handle *h) { if (h->qh_io_flags & IOFL_INFODIRTY) { if (h->qh_ops->write_info && h->qh_ops->write_info(h) < 0) return -1; h->qh_io_flags &= ~IOFL_INFODIRTY; } if (h->qh_ops->end_io && h->qh_ops->end_io(h) < 0) return -1; if (h->qh_fd != -1) { flock(h->qh_fd, LOCK_UN); close(h->qh_fd); } free(h); return 0; } /* * Create empty quota structure */ struct dquot *get_empty_dquot(void) { struct dquot *dquot = smalloc(sizeof(struct dquot)); memset(dquot, 0, sizeof(*dquot)); dquot->dq_id = -1; return dquot; } /* * Check whether values in current dquot can be stored on disk */ int check_dquot_range(struct dquot *dquot) { struct util_dqinfo *info = &dquot->dq_h->qh_info; if (dquot->dq_dqb.dqb_bhardlimit > info->dqi_max_b_limit || dquot->dq_dqb.dqb_bsoftlimit > info->dqi_max_b_limit || dquot->dq_dqb.dqb_ihardlimit > info->dqi_max_i_limit || dquot->dq_dqb.dqb_isoftlimit > info->dqi_max_i_limit) { errstr(_("Trying to set quota limits out of range " "supported by quota format on %s.\n"), dquot->dq_h->qh_quotadev); return -1; } if (dquot->dq_dqb.dqb_curinodes > info->dqi_max_i_usage || dquot->dq_dqb.dqb_curspace > info->dqi_max_b_usage) { errstr(_("Trying to set quota usage out of range " "supported by quota format on %s.\n"), dquot->dq_h->qh_quotadev); return -1; } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio.h��������������������������������������������������������������������������������0000664�0000000�0000000�00000014333�14463210551�0014436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Header of IO operations for quota utilities * */ #ifndef GUARD_QUOTAIO_H #define GUARD_QUOTAIO_H #include <limits.h> #include <sys/types.h> #include <sys/stat.h> #include <stdint.h> #include "quota.h" #include "mntopt.h" #include "dqblk_v1.h" #include "dqblk_v2.h" #include "dqblk_rpc.h" #include "dqblk_xfs.h" #define QUOTAFORMATS 6 #define INITQFBASENAMES {\ "quota",\ "aquota",\ "aquota",\ "",\ "",\ "",\ } #define MAX_FSTYPE_LEN 16 /* Maximum length of filesystem type name */ /* Values for format handling */ #define QF_ERROR -1 /* There was error while detecting format (maybe unknown format...) */ #define QF_VFSOLD 0 /* Old quota format */ #define QF_VFSV0 1 /* Quota files with tree quota format */ #define QF_VFSV1 2 /* Quota files with 64-bit tree quota format */ #define QF_RPC 3 /* RPC should be used on given filesystem */ #define QF_XFS 4 /* XFS quota format */ #define QF_META 5 /* Quota files are hidden, we don't care about the format */ #define QF_VFSUNKNOWN 6 /* Some VFS quotas, we didn't detect particular format yet */ static inline int is_tree_qfmt(int fmt) { return fmt == QF_VFSV0 || fmt == QF_VFSV1; } /* * Definitions for disk quotas imposed on the average user * (big brother finally hits Linux). * * The following constants define the default amount of time given a user * before the soft limits are treated as hard limits (usually resulting * in an allocation failure). The timer is started when the user crosses * their soft limit, it is reset when they go below their soft limit. */ #define MAX_IQ_TIME 604800 /* (7*24*60*60) 1 week */ #define MAX_DQ_TIME 604800 /* (7*24*60*60) 1 week */ #define IOFL_QUOTAON 0x01 /* Is quota enabled in kernel? */ #define IOFL_INFODIRTY 0x02 /* Did info change? */ #define IOFL_RO 0x04 /* Just RO access? */ #define IOFL_NFS_MIXED_PATHS 0x08 /* Should we trim leading slashes from NFSv4 mountpoints? */ struct quotafile_ops; /* Generic information about quotafile */ struct util_dqinfo { time_t dqi_bgrace; /* Block grace time for given quotafile */ time_t dqi_igrace; /* Inode grace time for given quotafile */ uint64_t dqi_max_b_limit; /* Maximal block limit storable in current format */ uint64_t dqi_max_i_limit; /* Maximal inode limit storable in current format */ uint64_t dqi_max_b_usage; /* Maximal block usage storable in current format */ uint64_t dqi_max_i_usage; /* Maximal inode usage storable in current format */ union { struct v2_mem_dqinfo v2_mdqi; struct xfs_mem_dqinfo xfs_mdqi; } u; /* Format specific info about quotafile */ }; /* Structure for one opened quota file */ struct quota_handle { int qh_fd; /* Handle of file (-1 when IOFL_QUOTAON) */ int qh_io_flags; /* IO flags for file */ char qh_quotadev[PATH_MAX]; /* Device file is for */ char qh_dir[PATH_MAX]; /* Directory filesystem is mounted at */ char qh_fstype[MAX_FSTYPE_LEN]; /* Type of the filesystem on qh_quotadev */ int qh_type; /* Type of quotafile */ int qh_fmt; /* Quotafile format */ struct stat qh_stat; /* stat(2) for qh_quotadev */ struct quotafile_ops *qh_ops; /* Operations on quotafile */ struct util_dqinfo qh_info; /* Generic quotafile info */ }; /* Statistics gathered from kernel */ struct util_dqstats { u_int32_t lookups; u_int32_t drops; u_int32_t reads; u_int32_t writes; u_int32_t cache_hits; u_int32_t allocated_dquots; u_int32_t free_dquots; u_int32_t syncs; u_int32_t version; }; /* Utility quota block */ struct util_dqblk { qsize_t dqb_ihardlimit; qsize_t dqb_isoftlimit; qsize_t dqb_curinodes; qsize_t dqb_bhardlimit; qsize_t dqb_bsoftlimit; qsize_t dqb_curspace; time_t dqb_btime; time_t dqb_itime; union { struct v2_mem_dqblk v2_mdqb; } u; /* Format specific dquot information */ }; #define DQ_FOUND 0x01 /* Dquot was found in the edquotas file */ #define DQ_PRINTED 0x02 /* Dquota has been already printed by repquota */ /* Structure for one loaded quota */ struct dquot { struct dquot *dq_next; /* Pointer to next dquot in the list */ qid_t dq_id; /* ID dquot belongs to */ int dq_flags; /* Some flags for utils */ struct quota_handle *dq_h; /* Handle of quotafile dquot belongs to */ struct util_dqblk dq_dqb; /* Parsed data of dquot */ }; /* Flags for commit function (have effect only when quota in kernel is turned on) */ #define COMMIT_USAGE QIF_USAGE #define COMMIT_LIMITS QIF_LIMITS #define COMMIT_TIMES QIF_TIMES #define COMMIT_ALL (COMMIT_USAGE | COMMIT_LIMITS | COMMIT_TIMES) /* Structure of quotafile operations */ struct quotafile_ops { int (*check_file) (int fd, int type, int fmt); /* Check whether quotafile is in our format */ int (*init_io) (struct quota_handle * h); /* Open quotafile */ int (*new_io) (struct quota_handle * h); /* Create new quotafile */ int (*end_io) (struct quota_handle * h); /* Write all changes and close quotafile */ int (*write_info) (struct quota_handle * h); /* Write info about quotafile */ struct dquot *(*read_dquot) (struct quota_handle * h, qid_t id); /* Read dquot into memory */ int (*commit_dquot) (struct dquot * dquot, int flag); /* Write given dquot to disk */ int (*scan_dquots) (struct quota_handle * h, int (*process_dquot) (struct dquot * dquot, char * dqname)); /* Scan quotafile and call callback on every structure */ int (*report) (struct quota_handle * h, int verbose); /* Function called after 'repquota' to print format specific file information */ }; /* This might go into a special header file but that sounds a bit silly... */ extern struct quotafile_ops quotafile_ops_meta; static inline void mark_quotafile_info_dirty(struct quota_handle *h) { h->qh_io_flags |= IOFL_INFODIRTY; } #define QIO_ENABLED(h) ((h)->qh_io_flags & IOFL_QUOTAON) #define QIO_RO(h) ((h)->qh_io_flags & IOFL_RO) struct mount_entry; /* Check quota format used on specified medium and initialize it */ struct quota_handle *init_io(struct mount_entry *mnt, int type, int fmt, int flags); /* Create new quotafile of specified format on given filesystem */ struct quota_handle *new_io(struct mount_entry *mnt, int type, int fmt); /* Close quotafile */ int end_io(struct quota_handle *h); /* Get empty quota structure */ struct dquot *get_empty_dquot(void); /* Check whether values in current dquot can be stored on disk */ int check_dquot_range(struct dquot *dquot); #endif /* GUARD_QUOTAIO_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_generic.c������������������������������������������������������������������������0000664�0000000�0000000�00000012771�14463210551�0016131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Implementation of communication with kernel generic interface * * Jan Kara <jack@suse.cz> - sponsored by SuSE CR */ #include "config.h" #include <errno.h> #include <string.h> #include <pwd.h> #include <grp.h> #include <stdlib.h> #include <sys/types.h> #include "pot.h" #include "common.h" #include "quotaio.h" #include "quota.h" #include "quotasys.h" /* Convert kernel quotablock format to utility one */ static inline void generic_kern2utildqblk(struct util_dqblk *u, struct if_dqblk *k) { u->dqb_ihardlimit = k->dqb_ihardlimit; u->dqb_isoftlimit = k->dqb_isoftlimit; u->dqb_bhardlimit = k->dqb_bhardlimit; u->dqb_bsoftlimit = k->dqb_bsoftlimit; u->dqb_curinodes = k->dqb_curinodes; u->dqb_curspace = k->dqb_curspace; u->dqb_itime = k->dqb_itime; u->dqb_btime = k->dqb_btime; } /* Convert utility quotablock format to kernel one */ static inline void generic_util2kerndqblk(struct if_dqblk *k, struct util_dqblk *u) { k->dqb_ihardlimit = u->dqb_ihardlimit; k->dqb_isoftlimit = u->dqb_isoftlimit; k->dqb_bhardlimit = u->dqb_bhardlimit; k->dqb_bsoftlimit = u->dqb_bsoftlimit; k->dqb_curinodes = u->dqb_curinodes; k->dqb_curspace = u->dqb_curspace; k->dqb_itime = u->dqb_itime; k->dqb_btime = u->dqb_btime; } /* Get info from kernel to handle */ int vfs_get_info(struct quota_handle *h) { struct if_dqinfo kinfo; if (quotactl(QCMD(Q_GETINFO, h->qh_type), h->qh_quotadev, 0, (void *)&kinfo) < 0) { errstr(_("Cannot get info for %s quota file from kernel on %s: %s\n"), type2name(h->qh_type), h->qh_quotadev, strerror(errno)); return -1; } h->qh_info.dqi_bgrace = kinfo.dqi_bgrace; h->qh_info.dqi_igrace = kinfo.dqi_igrace; return 0; } /* Set info in kernel from handle */ int vfs_set_info(struct quota_handle *h, int flags) { struct if_dqinfo kinfo; kinfo.dqi_bgrace = h->qh_info.dqi_bgrace; kinfo.dqi_igrace = h->qh_info.dqi_igrace; kinfo.dqi_valid = flags; if (quotactl(QCMD(Q_SETINFO, h->qh_type), h->qh_quotadev, 0, (void *)&kinfo) < 0) { errstr(_("Cannot set info for %s quota file from kernel on %s: %s\n"), type2name(h->qh_type), h->qh_quotadev, strerror(errno)); return -1; } return 0; } /* Get dquot from kernel */ int vfs_get_dquot(struct dquot *dquot) { struct if_dqblk kdqblk; if (quotactl(QCMD(Q_GETQUOTA, dquot->dq_h->qh_type), dquot->dq_h->qh_quotadev, dquot->dq_id, (void *)&kdqblk) < 0) { errstr(_("Cannot get quota for %s %d from kernel on %s: %s\n"), type2name(dquot->dq_h->qh_type), dquot->dq_id, dquot->dq_h->qh_quotadev, strerror(errno)); return -1; } generic_kern2utildqblk(&dquot->dq_dqb, &kdqblk); return 0; } /* Set dquot in kernel */ int vfs_set_dquot(struct dquot *dquot, int flags) { struct if_dqblk kdqblk; generic_util2kerndqblk(&kdqblk, &dquot->dq_dqb); kdqblk.dqb_valid = flags; if (quotactl(QCMD(Q_SETQUOTA, dquot->dq_h->qh_type), dquot->dq_h->qh_quotadev, dquot->dq_id, (void *)&kdqblk) < 0) { errstr(_("Cannot set quota for %s %d from kernel on %s: %s\n"), type2name(dquot->dq_h->qh_type), dquot->dq_id, dquot->dq_h->qh_quotadev, strerror(errno)); return -1; } return 0; } static int scan_one_dquot(struct dquot *dquot, int (*get_dquot)(struct dquot *)) { int ret; struct util_dqblk *dqb = &dquot->dq_dqb; memset(dqb, 0, sizeof(struct util_dqblk)); ret = get_dquot(dquot); if (ret < 0) return ret; if (!dqb->dqb_bhardlimit && !dqb->dqb_bsoftlimit && !dqb->dqb_ihardlimit && !dqb->dqb_isoftlimit && !dqb->dqb_curinodes && !dqb->dqb_curspace) return 1; return 0; } /* Generic quota scanning using passwd... */ int generic_scan_dquots(struct quota_handle *h, int (*process_dquot)(struct dquot *dquot, char *dqname), int (*get_dquot)(struct dquot *dquot)) { struct dquot *dquot = get_empty_dquot(); int ret = 0; dquot->dq_h = h; if (h->qh_type == USRQUOTA) { struct passwd *usr; setpwent(); while ((usr = getpwent()) != NULL) { dquot->dq_id = usr->pw_uid; ret = scan_one_dquot(dquot, get_dquot); if (ret < 0) break; if (ret > 0) continue; ret = process_dquot(dquot, usr->pw_name); if (ret < 0) break; } endpwent(); } else if (h->qh_type == GRPQUOTA) { struct group *grp; setgrent(); while ((grp = getgrent()) != NULL) { dquot->dq_id = grp->gr_gid; ret = scan_one_dquot(dquot, get_dquot); if (ret < 0) break; if (ret > 0) continue; ret = process_dquot(dquot, grp->gr_name); if (ret < 0) break; } endgrent(); } else if (h->qh_type == PRJQUOTA) { struct fs_project *prj; setprent(); while ((prj = getprent()) != NULL) { dquot->dq_id = prj->pr_id; ret = scan_one_dquot(dquot, get_dquot); if (ret < 0) break; if (ret > 0) continue; ret = process_dquot(dquot, prj->pr_name); if (ret < 0) break; } endprent(); } free(dquot); return ret; } int vfs_scan_dquots(struct quota_handle *h, int (*process_dquot)(struct dquot *dquot, char *dqname)) { struct dquot *dquot = get_empty_dquot(); qid_t id = 0; struct if_nextdqblk kdqblk; int ret; dquot->dq_h = h; while (1) { ret = quotactl(QCMD(Q_GETNEXTQUOTA, h->qh_type), h->qh_quotadev, id, (void *)&kdqblk); if (ret < 0) break; /* * This is a slight hack but we know struct if_dqblk is a * subset of struct if_nextdqblk */ generic_kern2utildqblk(&dquot->dq_dqb, (struct if_dqblk *)&kdqblk); dquot->dq_id = kdqblk.dqb_id; ret = process_dquot(dquot, NULL); if (ret < 0) break; id = kdqblk.dqb_id + 1; /* id -1 is invalid and the last one... */ if (id == -1) { errno = ENOENT; break; } } free(dquot); if (errno == ENOENT) return 0; return ret; } �������quota-4.09/quotaio_generic.h������������������������������������������������������������������������0000664�0000000�0000000�00000001606�14463210551�0016131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Header file for communication with kernel generic interface * */ #ifndef GUARD_QUOTAIO_GENERIC_H #define GUARD_QUOTAIO_GENERIC_H #include "quotaio.h" /* Get info from kernel to handle */ int vfs_get_info(struct quota_handle *h); /* Set info in kernel from handle */ int vfs_set_info(struct quota_handle *h, int flags); /* Get dquot from kernel */ int vfs_get_dquot(struct dquot *dquot); /* Set dquot in kernel */ int vfs_set_dquot(struct dquot *dquot, int flags); /* Generic routine for scanning dquots when quota format does not have * better way */ int generic_scan_dquots(struct quota_handle *h, int (*process_dquot)(struct dquot *dquot, char *dqname), int (*get_dquot)(struct dquot *dquot)); /* Scan all dquots using kernel quotactl to get existing ids */ int vfs_scan_dquots(struct quota_handle *h, int (*process_dquot)(struct dquot *dquot, char *dqname)); #endif ��������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_meta.c���������������������������������������������������������������������������0000664�0000000�0000000�00000003446�14463210551�0015442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Implementation of handling of quotafiles which are hidden * * Jan Kara <jack@suse.cz> */ #include "config.h" #include <string.h> #include <stdlib.h> #include <errno.h> #include <sys/types.h> #include "pot.h" #include "common.h" #include "quotasys.h" #include "quotaio_generic.h" static int meta_init_io(struct quota_handle *h) { if (!QIO_ENABLED(h)) { errstr(_("Metadata init_io called when kernel support is not enabled.\n")); return -1; } if (kernel_iface != IFACE_GENERIC) { errstr(_("Metadata init_io called when kernel does not support generic quota interface!\n")); return -1; } return vfs_get_info(h); } static int meta_write_info(struct quota_handle *h) { return vfs_set_info(h, IIF_BGRACE | IIF_IGRACE); } static struct dquot *meta_read_dquot(struct quota_handle *h, qid_t id) { struct dquot *dquot = get_empty_dquot(); dquot->dq_id = id; dquot->dq_h = h; memset(&dquot->dq_dqb, 0, sizeof(struct util_dqblk)); if (vfs_get_dquot(dquot) < 0) { free(dquot); return NULL; } return dquot; } static int meta_commit_dquot(struct dquot *dquot, int flags) { return vfs_set_dquot(dquot, flags); } static int meta_scan_dquots(struct quota_handle *h, int (*process_dquot)(struct dquot *dquot, char *dqname)) { struct if_nextdqblk kdqblk; int ret; ret = quotactl(QCMD(Q_GETNEXTQUOTA, h->qh_type), h->qh_quotadev, 0, (void *)&kdqblk); /* * Fall back to scanning using passwd if Q_GETNEXTQUOTA is not * supported */ if (ret < 0 && (errno == ENOSYS || errno == EINVAL)) return generic_scan_dquots(h, process_dquot, vfs_get_dquot); return vfs_scan_dquots(h, process_dquot); } struct quotafile_ops quotafile_ops_meta = { init_io: meta_init_io, write_info: meta_write_info, read_dquot: meta_read_dquot, commit_dquot: meta_commit_dquot, scan_dquots: meta_scan_dquots, }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_rpc.c����������������������������������������������������������������������������0000664�0000000�0000000�00000003517�14463210551�0015277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * quotaio_rpc.c - quota IO operations for RPC (just wrappers for RPC calls) */ #include "config.h" #include <stdio.h> #include <errno.h> #include <stdlib.h> #include <sys/types.h> #include "common.h" #include "quotaio.h" #include "dqblk_rpc.h" #include "rquota_client.h" #include "pot.h" static int rpc_init_io(struct quota_handle *h); static struct dquot *rpc_read_dquot(struct quota_handle *h, qid_t id); static int rpc_commit_dquot(struct dquot *dquot, int flags); struct quotafile_ops quotafile_ops_rpc = { init_io: rpc_init_io, read_dquot: rpc_read_dquot, commit_dquot: rpc_commit_dquot }; /* * Define maximal values RPC client can transmit to server. */ static int rpc_init_io(struct quota_handle *h) { #ifdef RPC h->qh_info.dqi_max_b_limit = ~(uint32_t)0; h->qh_info.dqi_max_i_limit = ~(uint32_t)0; h->qh_info.dqi_max_b_usage = ((uint64_t)(~(uint32_t)0)) << QUOTABLOCK_BITS; h->qh_info.dqi_max_i_usage = ~(uint32_t)0; return 0; #else return -1; #endif } /* * Read a dqblk struct from RPC server - just wrapper function. */ static struct dquot *rpc_read_dquot(struct quota_handle *h, qid_t id) { #ifdef RPC struct dquot *dquot = get_empty_dquot(); int ret; dquot->dq_id = id; dquot->dq_h = h; if ((ret = rpc_rquota_get(dquot)) < 0) { errno = -ret; free(dquot); return NULL; } return dquot; #else errno = ENOTSUP; return NULL; #endif } /* * Write a dqblk struct to RPC server - just wrapper function. */ static int rpc_commit_dquot(struct dquot *dquot, int flags) { #ifdef RPC int ret; if (QIO_RO(dquot->dq_h)) { errstr(_("Trying to write quota to readonly quotafile on %s\n"), dquot->dq_h->qh_quotadev); errno = EPERM; return -1; } if ((ret = rpc_rquota_set(QCMD(Q_RPC_SETQUOTA, dquot->dq_h->qh_type), dquot)) < 0) { errno = -ret; return -1; } return 0; #else errno = ENOTSUP; return -1; #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_tree.c���������������������������������������������������������������������������0000664�0000000�0000000�00000035207�14463210551�0015453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Implementation of new quotafile format * * Jan Kara <jack@suse.cz> - sponsored by SuSE CR */ #include "config.h" #include <sys/types.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <endian.h> #include "pot.h" #include "common.h" #include "quota_tree.h" #include "quotaio.h" #include "quotasys.h" #include "quotaio_generic.h" typedef char *dqbuf_t; #define getdqbuf() smalloc(QT_BLKSIZE) #define freedqbuf(buf) free(buf) /* Is given dquot empty? */ int qtree_entry_unused(struct qtree_mem_dqinfo *info, char *disk) { int i; for (i = 0; i < info->dqi_entry_size; i++) if (disk[i]) return 0; return 1; } int qtree_dqstr_in_blk(struct qtree_mem_dqinfo *info) { return (QT_BLKSIZE - sizeof(struct qt_disk_dqdbheader)) / info->dqi_entry_size; } static int get_index(qid_t id, int depth) { return (id >> ((QT_TREEDEPTH - depth - 1) * 8)) & 0xff; } /* Read given block */ static void read_blk(struct quota_handle *h, uint blk, dqbuf_t buf) { int err; lseek(h->qh_fd, blk << QT_BLKSIZE_BITS, SEEK_SET); err = read(h->qh_fd, buf, QT_BLKSIZE); if (err < 0) die(2, _("Cannot read block %u: %s\n"), blk, strerror(errno)); else if (err != QT_BLKSIZE) memset(buf + err, 0, QT_BLKSIZE - err); } /* Write block */ static int write_blk(struct quota_handle *h, uint blk, dqbuf_t buf) { int err; lseek(h->qh_fd, blk << QT_BLKSIZE_BITS, SEEK_SET); err = write(h->qh_fd, buf, QT_BLKSIZE); if (err < 0 && errno != ENOSPC) die(2, _("Cannot write block (%u): %s\n"), blk, strerror(errno)); if (err != QT_BLKSIZE) return -ENOSPC; return 0; } /* Get free block in file (either from free list or create new one) */ static int get_free_dqblk(struct quota_handle *h) { dqbuf_t buf = getdqbuf(); struct qt_disk_dqdbheader *dh = (struct qt_disk_dqdbheader *)buf; struct qtree_mem_dqinfo *info = &h->qh_info.u.v2_mdqi.dqi_qtree; int blk; if (info->dqi_free_blk) { blk = info->dqi_free_blk; read_blk(h, blk, buf); info->dqi_free_blk = le32toh(dh->dqdh_next_free); } else { memset(buf, 0, QT_BLKSIZE); if (write_blk(h, info->dqi_blocks, buf) < 0) { /* Assure block allocation... */ freedqbuf(buf); errstr(_("Cannot allocate new quota block (out of disk space).\n")); return -ENOSPC; } blk = info->dqi_blocks++; } mark_quotafile_info_dirty(h); freedqbuf(buf); return blk; } /* Put given block to free list */ static void put_free_dqblk(struct quota_handle *h, dqbuf_t buf, uint blk) { struct qt_disk_dqdbheader *dh = (struct qt_disk_dqdbheader *)buf; struct qtree_mem_dqinfo *info = &h->qh_info.u.v2_mdqi.dqi_qtree; dh->dqdh_next_free = htole32(info->dqi_free_blk); dh->dqdh_prev_free = htole32(0); dh->dqdh_entries = htole16(0); info->dqi_free_blk = blk; mark_quotafile_info_dirty(h); write_blk(h, blk, buf); } /* Remove given block from the list of blocks with free entries */ static void remove_free_dqentry(struct quota_handle *h, dqbuf_t buf, uint blk) { dqbuf_t tmpbuf = getdqbuf(); struct qt_disk_dqdbheader *dh = (struct qt_disk_dqdbheader *)buf; uint nextblk = le32toh(dh->dqdh_next_free), prevblk = le32toh(dh->dqdh_prev_free); if (nextblk) { read_blk(h, nextblk, tmpbuf); ((struct qt_disk_dqdbheader *)tmpbuf)->dqdh_prev_free = dh->dqdh_prev_free; write_blk(h, nextblk, tmpbuf); } if (prevblk) { read_blk(h, prevblk, tmpbuf); ((struct qt_disk_dqdbheader *)tmpbuf)->dqdh_next_free = dh->dqdh_next_free; write_blk(h, prevblk, tmpbuf); } else { h->qh_info.u.v2_mdqi.dqi_qtree.dqi_free_entry = nextblk; mark_quotafile_info_dirty(h); } freedqbuf(tmpbuf); dh->dqdh_next_free = dh->dqdh_prev_free = htole32(0); write_blk(h, blk, buf); /* No matter whether write succeeds block is out of list */ } /* Insert given block to the beginning of list with free entries */ static void insert_free_dqentry(struct quota_handle *h, dqbuf_t buf, uint blk) { dqbuf_t tmpbuf = getdqbuf(); struct qt_disk_dqdbheader *dh = (struct qt_disk_dqdbheader *)buf; struct qtree_mem_dqinfo *info = &h->qh_info.u.v2_mdqi.dqi_qtree; dh->dqdh_next_free = htole32(info->dqi_free_entry); dh->dqdh_prev_free = htole32(0); write_blk(h, blk, buf); if (info->dqi_free_entry) { read_blk(h, info->dqi_free_entry, tmpbuf); ((struct qt_disk_dqdbheader *)tmpbuf)->dqdh_prev_free = htole32(blk); write_blk(h, info->dqi_free_entry, tmpbuf); } freedqbuf(tmpbuf); info->dqi_free_entry = blk; mark_quotafile_info_dirty(h); } /* Find space for dquot */ static uint find_free_dqentry(struct quota_handle *h, struct dquot *dquot, int *err) { int blk, i; struct qt_disk_dqdbheader *dh; struct qtree_mem_dqinfo *info = &h->qh_info.u.v2_mdqi.dqi_qtree; char *ddquot; dqbuf_t buf; *err = 0; buf = getdqbuf(); dh = (struct qt_disk_dqdbheader *)buf; if (info->dqi_free_entry) { blk = info->dqi_free_entry; read_blk(h, blk, buf); } else { blk = get_free_dqblk(h); if (blk < 0) { freedqbuf(buf); *err = blk; return 0; } memset(buf, 0, QT_BLKSIZE); info->dqi_free_entry = blk; mark_quotafile_info_dirty(h); } if (le16toh(dh->dqdh_entries) + 1 >= qtree_dqstr_in_blk(info)) /* Block will be full? */ remove_free_dqentry(h, buf, blk); dh->dqdh_entries = htole16(le16toh(dh->dqdh_entries) + 1); /* Find free structure in block */ ddquot = buf + sizeof(struct qt_disk_dqdbheader); for (i = 0; i < qtree_dqstr_in_blk(info) && !qtree_entry_unused(info, ddquot); i++, ddquot += info->dqi_entry_size); if (i == qtree_dqstr_in_blk(info)) die(2, _("find_free_dqentry(): Data block full but it shouldn't.\n")); write_blk(h, blk, buf); dquot->dq_dqb.u.v2_mdqb.dqb_off = (blk << QT_BLKSIZE_BITS) + sizeof(struct qt_disk_dqdbheader) + i * info->dqi_entry_size; freedqbuf(buf); return blk; } /* Insert reference to structure into the trie */ static int do_insert_tree(struct quota_handle *h, struct dquot *dquot, uint * treeblk, int depth) { dqbuf_t buf; int newson = 0, newact = 0; u_int32_t *ref; uint newblk; int ret = 0; buf = getdqbuf(); if (!*treeblk) { ret = get_free_dqblk(h); if (ret < 0) goto out_buf; *treeblk = ret; memset(buf, 0, QT_BLKSIZE); newact = 1; } else read_blk(h, *treeblk, buf); ref = (u_int32_t *) buf; newblk = le32toh(ref[get_index(dquot->dq_id, depth)]); if (!newblk) newson = 1; if (depth == QT_TREEDEPTH - 1) { if (newblk) die(2, _("Inserting already present quota entry (block %u).\n"), ref[get_index(dquot->dq_id, depth)]); newblk = find_free_dqentry(h, dquot, &ret); } else ret = do_insert_tree(h, dquot, &newblk, depth + 1); if (newson && ret >= 0) { ref[get_index(dquot->dq_id, depth)] = htole32(newblk); write_blk(h, *treeblk, buf); } else if (newact && ret < 0) put_free_dqblk(h, buf, *treeblk); out_buf: freedqbuf(buf); return ret; } /* Wrapper for inserting quota structure into tree */ static void dq_insert_tree(struct quota_handle *h, struct dquot *dquot) { uint tmp = QT_TREEOFF; if (do_insert_tree(h, dquot, &tmp, 0) < 0) die(2, _("Cannot write quota (id %u): %s\n"), (uint) dquot->dq_id, strerror(errno)); } /* Write dquot to file */ void qtree_write_dquot(struct dquot *dquot) { ssize_t ret; struct qtree_mem_dqinfo *info = &dquot->dq_h->qh_info.u.v2_mdqi.dqi_qtree; char *ddquot = smalloc(info->dqi_entry_size); if (!dquot->dq_dqb.u.v2_mdqb.dqb_off) dq_insert_tree(dquot->dq_h, dquot); lseek(dquot->dq_h->qh_fd, dquot->dq_dqb.u.v2_mdqb.dqb_off, SEEK_SET); info->dqi_ops->mem2disk_dqblk(ddquot, dquot); ret = write(dquot->dq_h->qh_fd, ddquot, info->dqi_entry_size); free(ddquot); if (ret != info->dqi_entry_size) { if (ret > 0) errno = ENOSPC; die(2, _("Quota write failed (id %u): %s\n"), (uint)dquot->dq_id, strerror(errno)); } } /* Free dquot entry in data block */ static void free_dqentry(struct quota_handle *h, struct dquot *dquot, uint blk) { struct qt_disk_dqdbheader *dh; struct qtree_mem_dqinfo *info = &h->qh_info.u.v2_mdqi.dqi_qtree; dqbuf_t buf = getdqbuf(); if (dquot->dq_dqb.u.v2_mdqb.dqb_off >> QT_BLKSIZE_BITS != blk) die(2, _("Quota structure has offset to other block (%u) than it should (%u).\n"), blk, (uint) (dquot->dq_dqb.u.v2_mdqb.dqb_off >> QT_BLKSIZE_BITS)); read_blk(h, blk, buf); dh = (struct qt_disk_dqdbheader *)buf; dh->dqdh_entries = htole16(le16toh(dh->dqdh_entries) - 1); if (!le16toh(dh->dqdh_entries)) { /* Block got free? */ remove_free_dqentry(h, buf, blk); put_free_dqblk(h, buf, blk); } else { memset(buf + (dquot->dq_dqb.u.v2_mdqb.dqb_off & ((1 << QT_BLKSIZE_BITS) - 1)), 0, info->dqi_entry_size); if (le16toh(dh->dqdh_entries) == qtree_dqstr_in_blk(info) - 1) /* First free entry? */ insert_free_dqentry(h, buf, blk); /* This will also write data block */ else write_blk(h, blk, buf); } dquot->dq_dqb.u.v2_mdqb.dqb_off = 0; freedqbuf(buf); } /* Remove reference to dquot from tree */ static void remove_tree(struct quota_handle *h, struct dquot *dquot, uint * blk, int depth) { dqbuf_t buf = getdqbuf(); uint newblk; u_int32_t *ref = (u_int32_t *) buf; read_blk(h, *blk, buf); newblk = le32toh(ref[get_index(dquot->dq_id, depth)]); if (depth == QT_TREEDEPTH - 1) { free_dqentry(h, dquot, newblk); newblk = 0; } else remove_tree(h, dquot, &newblk, depth + 1); if (!newblk) { int i; ref[get_index(dquot->dq_id, depth)] = htole32(0); for (i = 0; i < QT_BLKSIZE && !buf[i]; i++); /* Block got empty? */ /* Don't put the root block into the free block list */ if (i == QT_BLKSIZE && *blk != QT_TREEOFF) { put_free_dqblk(h, buf, *blk); *blk = 0; } else write_blk(h, *blk, buf); } freedqbuf(buf); } /* Delete dquot from tree */ void qtree_delete_dquot(struct dquot *dquot) { uint tmp = QT_TREEOFF; if (!dquot->dq_dqb.u.v2_mdqb.dqb_off) /* Even not allocated? */ return; remove_tree(dquot->dq_h, dquot, &tmp, 0); } /* Find entry in block */ static loff_t find_block_dqentry(struct quota_handle *h, struct dquot *dquot, uint blk) { struct qtree_mem_dqinfo *info = &h->qh_info.u.v2_mdqi.dqi_qtree; dqbuf_t buf = getdqbuf(); int i; char *ddquot = buf + sizeof(struct qt_disk_dqdbheader); read_blk(h, blk, buf); for (i = 0; i < qtree_dqstr_in_blk(info) && !info->dqi_ops->is_id(ddquot, dquot); i++, ddquot += info->dqi_entry_size); if (i == qtree_dqstr_in_blk(info)) die(2, _("Quota for id %u referenced but not present.\n"), dquot->dq_id); freedqbuf(buf); return (blk << QT_BLKSIZE_BITS) + sizeof(struct qt_disk_dqdbheader) + i * info->dqi_entry_size; } /* Find entry for given id in the tree */ static loff_t find_tree_dqentry(struct quota_handle *h, struct dquot *dquot, uint blk, int depth) { dqbuf_t buf = getdqbuf(); loff_t ret = 0; u_int32_t *ref = (u_int32_t *) buf; read_blk(h, blk, buf); ret = 0; blk = le32toh(ref[get_index(dquot->dq_id, depth)]); if (!blk) /* No reference? */ goto out_buf; if (depth < QT_TREEDEPTH - 1) ret = find_tree_dqentry(h, dquot, blk, depth + 1); else ret = find_block_dqentry(h, dquot, blk); out_buf: freedqbuf(buf); return ret; } /* Find entry for given id in the tree - wrapper function */ static inline loff_t find_dqentry(struct quota_handle *h, struct dquot *dquot) { return find_tree_dqentry(h, dquot, QT_TREEOFF, 0); } /* * Read dquot (either from disk or from kernel) * User can use errno to detect errstr when NULL is returned */ struct dquot *qtree_read_dquot(struct quota_handle *h, qid_t id) { struct qtree_mem_dqinfo *info = &h->qh_info.u.v2_mdqi.dqi_qtree; loff_t offset; ssize_t ret; char *ddquot = smalloc(info->dqi_entry_size); struct dquot *dquot = get_empty_dquot(); dquot->dq_id = id; dquot->dq_h = h; dquot->dq_dqb.u.v2_mdqb.dqb_off = 0; memset(&dquot->dq_dqb, 0, sizeof(struct util_dqblk)); offset = find_dqentry(h, dquot); if (offset > 0) { dquot->dq_dqb.u.v2_mdqb.dqb_off = offset; lseek(h->qh_fd, offset, SEEK_SET); ret = read(h->qh_fd, ddquot, info->dqi_entry_size); if (ret != info->dqi_entry_size) { if (ret > 0) errno = EIO; free(ddquot); die(2, _("Cannot read quota structure for id %u: %s\n"), dquot->dq_id, strerror(errno)); } info->dqi_ops->disk2mem_dqblk(dquot, ddquot); } free(ddquot); return dquot; } /* * Scan all dquots in file and call callback on each */ #define set_bit(bmp, ind) ((bmp)[(ind) >> 3] |= (1 << ((ind) & 7))) #define get_bit(bmp, ind) ((bmp)[(ind) >> 3] & (1 << ((ind) & 7))) static int report_block(struct dquot *dquot, uint blk, char *bitmap, int (*process_dquot) (struct dquot *, char *)) { struct qtree_mem_dqinfo *info = &dquot->dq_h->qh_info.u.v2_mdqi.dqi_qtree; dqbuf_t buf = getdqbuf(); struct qt_disk_dqdbheader *dh; char *ddata; int entries, i; set_bit(bitmap, blk); read_blk(dquot->dq_h, blk, buf); dh = (struct qt_disk_dqdbheader *)buf; ddata = buf + sizeof(struct qt_disk_dqdbheader); entries = le16toh(dh->dqdh_entries); for (i = 0; i < qtree_dqstr_in_blk(info); i++, ddata += info->dqi_entry_size) if (!qtree_entry_unused(info, ddata)) { info->dqi_ops->disk2mem_dqblk(dquot, ddata); if (process_dquot(dquot, NULL) < 0) break; } freedqbuf(buf); return entries; } static void check_reference(struct quota_handle *h, uint blk) { if (blk >= h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks) die(2, _("Illegal reference (%u >= %u) in %s quota file on %s. Quota file is probably corrupted.\nPlease run quotacheck(8) and try again.\n"), blk, h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks, type2name(h->qh_type), h->qh_quotadev); } static int report_tree(struct dquot *dquot, uint blk, int depth, char *bitmap, int (*process_dquot) (struct dquot *, char *)) { int entries = 0, i; dqbuf_t buf = getdqbuf(); u_int32_t *ref = (u_int32_t *) buf; read_blk(dquot->dq_h, blk, buf); if (depth == QT_TREEDEPTH - 1) { for (i = 0; i < QT_BLKSIZE >> 2; i++) { blk = le32toh(ref[i]); check_reference(dquot->dq_h, blk); if (blk && !get_bit(bitmap, blk)) entries += report_block(dquot, blk, bitmap, process_dquot); } } else { for (i = 0; i < QT_BLKSIZE >> 2; i++) if ((blk = le32toh(ref[i]))) { check_reference(dquot->dq_h, blk); entries += report_tree(dquot, blk, depth + 1, bitmap, process_dquot); } } freedqbuf(buf); return entries; } static uint find_set_bits(char *bmp, int blocks) { uint i, used = 0; for (i = 0; i < blocks; i++) if (get_bit(bmp, i)) used++; return used; } int qtree_scan_dquots(struct quota_handle *h, int (*process_dquot) (struct dquot *, char *)) { char *bitmap; struct v2_mem_dqinfo *v2info = &h->qh_info.u.v2_mdqi; struct qtree_mem_dqinfo *info = &v2info->dqi_qtree; struct dquot *dquot = get_empty_dquot(); dquot->dq_h = h; bitmap = smalloc((info->dqi_blocks + 7) >> 3); memset(bitmap, 0, (info->dqi_blocks + 7) >> 3); v2info->dqi_used_entries = report_tree(dquot, QT_TREEOFF, 0, bitmap, process_dquot); v2info->dqi_data_blocks = find_set_bits(bitmap, info->dqi_blocks); free(bitmap); free(dquot); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_v1.c�����������������������������������������������������������������������������0000664�0000000�0000000�00000023116�14463210551�0015036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Functions for handling old quota format with sparse quota file */ #include "config.h" #include <unistd.h> #include <errno.h> #include <string.h> #include <stdlib.h> #include "pot.h" #include "common.h" #include "quotaio_v1.h" #include "dqblk_v1.h" #include "quotaio.h" #include "quotasys.h" #include "quotaio_generic.h" static int v1_check_file(int fd, int type, int fmt); static int v1_init_io(struct quota_handle *h); static int v1_new_io(struct quota_handle *h); static int v1_write_info(struct quota_handle *h); static struct dquot *v1_read_dquot(struct quota_handle *h, qid_t id); static int v1_commit_dquot(struct dquot *dquot, int flags); static int v1_scan_dquots(struct quota_handle *h, int (*process_dquot) (struct dquot *dquot, char *dqname)); struct quotafile_ops quotafile_ops_1 = { check_file: v1_check_file, init_io: v1_init_io, new_io: v1_new_io, write_info: v1_write_info, read_dquot: v1_read_dquot, commit_dquot: v1_commit_dquot, scan_dquots: v1_scan_dquots, }; /* * Copy dquot from disk to memory */ static inline void v1_disk2memdqblk(struct util_dqblk *m, struct v1_disk_dqblk *d) { m->dqb_ihardlimit = d->dqb_ihardlimit; m->dqb_isoftlimit = d->dqb_isoftlimit; m->dqb_bhardlimit = d->dqb_bhardlimit; m->dqb_bsoftlimit = d->dqb_bsoftlimit; m->dqb_curinodes = d->dqb_curinodes; m->dqb_curspace = ((qsize_t)d->dqb_curblocks) * V1_DQBLK_SIZE; m->dqb_itime = d->dqb_itime; m->dqb_btime = d->dqb_btime; } /* * Copy dquot from memory to disk */ static inline void v1_mem2diskdqblk(struct v1_disk_dqblk *d, struct util_dqblk *m) { d->dqb_ihardlimit = m->dqb_ihardlimit; d->dqb_isoftlimit = m->dqb_isoftlimit; d->dqb_bhardlimit = m->dqb_bhardlimit; d->dqb_bsoftlimit = m->dqb_bsoftlimit; d->dqb_curinodes = m->dqb_curinodes; d->dqb_curblocks = m->dqb_curspace >> V1_DQBLK_SIZE_BITS; d->dqb_itime = m->dqb_itime; d->dqb_btime = m->dqb_btime; } /* Convert kernel quotablock format to utility one */ static inline void v1_kern2utildqblk(struct util_dqblk *u, struct v1_kern_dqblk *k) { u->dqb_ihardlimit = k->dqb_ihardlimit; u->dqb_isoftlimit = k->dqb_isoftlimit; u->dqb_bhardlimit = k->dqb_bhardlimit; u->dqb_bsoftlimit = k->dqb_bsoftlimit; u->dqb_curinodes = k->dqb_curinodes; u->dqb_curspace = ((qsize_t)k->dqb_curblocks) << V1_DQBLK_SIZE_BITS; u->dqb_itime = k->dqb_itime; u->dqb_btime = k->dqb_btime; } /* Convert utility quotablock format to kernel one */ static inline void v1_util2kerndqblk(struct v1_kern_dqblk *k, struct util_dqblk *u) { k->dqb_ihardlimit = u->dqb_ihardlimit; k->dqb_isoftlimit = u->dqb_isoftlimit; k->dqb_bhardlimit = u->dqb_bhardlimit; k->dqb_bsoftlimit = u->dqb_bsoftlimit; k->dqb_curinodes = u->dqb_curinodes; k->dqb_curblocks = (u->dqb_curspace + V1_DQBLK_SIZE - 1) >> V1_DQBLK_SIZE_BITS; k->dqb_itime = u->dqb_itime; k->dqb_btime = u->dqb_btime; } /* * Check whether quotafile is in our format */ static int v1_check_file(int fd, int type, int fmt) { struct stat st; if (fstat(fd, &st) < 0) return 0; if (!st.st_size || st.st_size % sizeof(struct v1_disk_dqblk)) return 0; return 1; } /* * Open quotafile */ static int v1_init_io(struct quota_handle *h) { if (QIO_ENABLED(h)) { if (kernel_iface == IFACE_GENERIC) { if (vfs_get_info(h) < 0) return -1; } else { struct v1_kern_dqblk kdqblk; if (quotactl(QCMD(Q_V1_GETQUOTA, h->qh_type), h->qh_quotadev, 0, (void *)&kdqblk) < 0) { if (errno == EPERM) { /* We have no permission to get this information? */ h->qh_info.dqi_bgrace = h->qh_info.dqi_igrace = 0; /* It hopefully won't be needed */ } else return -1; } else { h->qh_info.dqi_bgrace = kdqblk.dqb_btime; h->qh_info.dqi_igrace = kdqblk.dqb_itime; } } } else { struct v1_disk_dqblk ddqblk; lseek(h->qh_fd, 0, SEEK_SET); if (read(h->qh_fd, &ddqblk, sizeof(ddqblk)) != sizeof(ddqblk)) return -1; h->qh_info.dqi_bgrace = ddqblk.dqb_btime; h->qh_info.dqi_igrace = ddqblk.dqb_itime; } if (!h->qh_info.dqi_bgrace) h->qh_info.dqi_bgrace = MAX_DQ_TIME; if (!h->qh_info.dqi_igrace) h->qh_info.dqi_igrace = MAX_IQ_TIME; h->qh_info.dqi_max_b_limit = ~(uint32_t)0; h->qh_info.dqi_max_i_limit = ~(uint32_t)0; h->qh_info.dqi_max_b_usage = ((uint64_t)(~(uint32_t)0)) << V1_DQBLK_SIZE_BITS; h->qh_info.dqi_max_i_usage = ~(uint32_t)0; return 0; } /* * Initialize new quotafile */ static int v1_new_io(struct quota_handle *h) { struct v1_disk_dqblk ddqblk; /* Write at least roots dquot with grace times */ memset(&ddqblk, 0, sizeof(ddqblk)); ddqblk.dqb_btime = MAX_DQ_TIME; ddqblk.dqb_itime = MAX_IQ_TIME; h->qh_info.dqi_bgrace = MAX_DQ_TIME; h->qh_info.dqi_igrace = MAX_IQ_TIME; h->qh_info.dqi_max_b_limit = ~(uint32_t)0; h->qh_info.dqi_max_i_limit = ~(uint32_t)0; h->qh_info.dqi_max_b_usage = ((uint64_t)(~(uint32_t)0)) << V1_DQBLK_SIZE_BITS; h->qh_info.dqi_max_i_usage = ~(uint32_t)0; lseek(h->qh_fd, 0, SEEK_SET); if (write(h->qh_fd, &ddqblk, sizeof(ddqblk)) != sizeof(ddqblk)) return -1; return 0; } /* * Write information (grace times to file) */ static int v1_write_info(struct quota_handle *h) { if (QIO_RO(h)) { errstr(_("Trying to write info to readonly quotafile on %s.\n"), h->qh_quotadev); errno = EPERM; return -1; } if (QIO_ENABLED(h)) { if (kernel_iface == IFACE_GENERIC) { if (vfs_set_info(h, IIF_BGRACE | IIF_IGRACE) < 0) return -1; } else { struct v1_kern_dqblk kdqblk; if (quotactl(QCMD(Q_V1_GETQUOTA, h->qh_type), h->qh_quotadev, 0, (void *)&kdqblk) < 0) return -1; kdqblk.dqb_btime = h->qh_info.dqi_bgrace; kdqblk.dqb_itime = h->qh_info.dqi_igrace; if (quotactl(QCMD(Q_V1_SETQUOTA, h->qh_type), h->qh_quotadev, 0, (void *)&kdqblk) < 0) return -1; } } else { struct v1_disk_dqblk ddqblk; lseek(h->qh_fd, 0, SEEK_SET); if (read(h->qh_fd, &ddqblk, sizeof(ddqblk)) != sizeof(ddqblk)) return -1; ddqblk.dqb_btime = h->qh_info.dqi_bgrace; ddqblk.dqb_itime = h->qh_info.dqi_igrace; lseek(h->qh_fd, 0, SEEK_SET); if (write(h->qh_fd, &ddqblk, sizeof(ddqblk)) != sizeof(ddqblk)) return -1; } return 0; } /* * Read a dqblk struct from the quotafile. * User can use 'errno' to detect errstr. */ static struct dquot *v1_read_dquot(struct quota_handle *h, qid_t id) { struct v1_disk_dqblk ddqblk; struct dquot *dquot = get_empty_dquot(); dquot->dq_id = id; dquot->dq_h = h; if (QIO_ENABLED(h)) { /* Does kernel use the file? */ if (kernel_iface == IFACE_GENERIC) { if (vfs_get_dquot(dquot) < 0) { free(dquot); return NULL; } } else { struct v1_kern_dqblk kdqblk; if (quotactl(QCMD(Q_V1_GETQUOTA, h->qh_type), h->qh_quotadev, id, (void *)&kdqblk) < 0) { free(dquot); return NULL; } v1_kern2utildqblk(&dquot->dq_dqb, &kdqblk); } } else { lseek(h->qh_fd, (long)V1_DQOFF(id), SEEK_SET); switch (read(h->qh_fd, &ddqblk, sizeof(ddqblk))) { case 0: /* EOF */ /* * Convert implicit 0 quota (EOF) into an * explicit one (zero'ed dqblk) */ memset(&dquot->dq_dqb, 0, sizeof(struct util_dqblk)); break; case sizeof(struct v1_disk_dqblk): /* OK */ v1_disk2memdqblk(&dquot->dq_dqb, &ddqblk); break; default: /* ERROR */ free(dquot); return NULL; } } return dquot; } /* * Write a dqblk struct to the quotafile. * User can process use 'errno' to detect errstr */ static int v1_commit_dquot(struct dquot *dquot, int flags) { struct v1_disk_dqblk ddqblk; struct quota_handle *h = dquot->dq_h; if (QIO_RO(h)) { errstr(_("Trying to write quota to readonly quotafile on %s\n"), h->qh_quotadev); errno = EPERM; return -1; } if (QIO_ENABLED(h)) { /* Kernel uses same file? */ if (kernel_iface == IFACE_GENERIC) { if (vfs_set_dquot(dquot, flags) < 0) return -1; } else { struct v1_kern_dqblk kdqblk; int cmd; if (flags == COMMIT_USAGE) cmd = Q_V1_SETUSE; else if (flags == COMMIT_LIMITS) cmd = Q_V1_SETQLIM; else if (flags & COMMIT_TIMES) { errno = EINVAL; return -1; } else cmd = Q_V1_SETQUOTA; v1_util2kerndqblk(&kdqblk, &dquot->dq_dqb); if (quotactl(QCMD(cmd, h->qh_type), h->qh_quotadev, dquot->dq_id, (void *)&kdqblk) < 0) return -1; } } else { if (check_dquot_range(dquot) < 0) { errno = ERANGE; return -1; } v1_mem2diskdqblk(&ddqblk, &dquot->dq_dqb); lseek(h->qh_fd, (long)V1_DQOFF(dquot->dq_id), SEEK_SET); if (write(h->qh_fd, &ddqblk, sizeof(ddqblk)) != sizeof(ddqblk)) return -1; } return 0; } /* * Scan all dquots in file and call callback on each */ #define SCANBUFSIZE 256 static int v1_scan_dquots(struct quota_handle *h, int (*process_dquot) (struct dquot *, char *)) { int rd, scanbufpos = 0, scanbufsize = 0; char scanbuf[sizeof(struct v1_disk_dqblk)*SCANBUFSIZE]; struct v1_disk_dqblk *ddqblk; struct dquot *dquot = get_empty_dquot(); qid_t id = 0; memset(dquot, 0, sizeof(*dquot)); dquot->dq_h = h; lseek(h->qh_fd, 0, SEEK_SET); for(id = 0; ; id++, scanbufpos++) { if (scanbufpos >= scanbufsize) { rd = read(h->qh_fd, scanbuf, sizeof(scanbuf)); if (rd < 0 || rd % sizeof(struct v1_disk_dqblk)) goto out_err; if (!rd) break; scanbufpos = 0; scanbufsize = rd / sizeof(struct v1_disk_dqblk); } ddqblk = ((struct v1_disk_dqblk *)scanbuf) + scanbufpos; if ((ddqblk->dqb_ihardlimit | ddqblk->dqb_isoftlimit | ddqblk->dqb_bhardlimit | ddqblk->dqb_bsoftlimit | ddqblk->dqb_curblocks | ddqblk->dqb_curinodes | ddqblk->dqb_itime | ddqblk->dqb_btime) == 0) continue; v1_disk2memdqblk(&dquot->dq_dqb, ddqblk); dquot->dq_id = id; if ((rd = process_dquot(dquot, NULL)) < 0) { free(dquot); return rd; } } if (!rd) { /* EOF? */ free(dquot); return 0; } out_err: free(dquot); return -1; /* Some read errstr... */ } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_v1.h�����������������������������������������������������������������������������0000664�0000000�0000000�00000003262�14463210551�0015043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Headerfile for old quotafile format */ #ifndef GUARD_QUOTAIO_V1_H #define GUARD_QUOTAIO_V1_H #include <sys/types.h> #define V1_DQBLK_SIZE_BITS 10 #define V1_DQBLK_SIZE (1 << V1_DQBLK_SIZE_BITS) /* Size of one quota block in bytes in old format */ #define V1_DQOFF(id) ((loff_t) ((id) * sizeof(struct v1_disk_dqblk))) /* Structure of quota on disk */ struct v1_disk_dqblk { u_int32_t dqb_bhardlimit; /* absolute limit on disk blks alloc */ u_int32_t dqb_bsoftlimit; /* preferred limit on disk blks */ u_int32_t dqb_curblocks; /* current block count */ u_int32_t dqb_ihardlimit; /* maximum # allocated inodes */ u_int32_t dqb_isoftlimit; /* preferred limit on inodes */ u_int32_t dqb_curinodes; /* current # allocated inodes */ time_t dqb_btime; /* time limit for excessive disk use */ time_t dqb_itime; /* time limit for excessive files */ } __attribute__ ((packed)); /* Structure used for communication with kernel */ struct v1_kern_dqblk { u_int32_t dqb_bhardlimit; /* absolute limit on disk blks alloc */ u_int32_t dqb_bsoftlimit; /* preferred limit on disk blks */ u_int32_t dqb_curblocks; /* current block count */ u_int32_t dqb_ihardlimit; /* maximum # allocated inodes */ u_int32_t dqb_isoftlimit; /* preferred inode limit */ u_int32_t dqb_curinodes; /* current # allocated inodes */ time_t dqb_btime; /* time limit for excessive disk use */ time_t dqb_itime; /* time limit for excessive files */ }; struct v1_dqstats { u_int32_t lookups; u_int32_t drops; u_int32_t reads; u_int32_t writes; u_int32_t cache_hits; u_int32_t allocated_dquots; u_int32_t free_dquots; u_int32_t syncs; }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_v2.c�����������������������������������������������������������������������������0000664�0000000�0000000�00000036500�14463210551�0015040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Implementation of new quotafile format * * Jan Kara <jack@suse.cz> - sponsored by SuSE CR */ #include "config.h" #include <sys/types.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <endian.h> #include "pot.h" #include "common.h" #include "quotaio_v2.h" #include "dqblk_v2.h" #include "quotaio.h" #include "quotasys.h" #include "quotaio_generic.h" typedef char *dqbuf_t; static int v2_check_file(int fd, int type, int fmt); static int v2_init_io(struct quota_handle *h); static int v2_new_io(struct quota_handle *h); static int v2_write_info(struct quota_handle *h); static struct dquot *v2_read_dquot(struct quota_handle *h, qid_t id); static int v2_commit_dquot(struct dquot *dquot, int flags); static int v2_scan_dquots(struct quota_handle *h, int (*process_dquot) (struct dquot *dquot, char *dqname)); static int v2_report(struct quota_handle *h, int verbose); struct quotafile_ops quotafile_ops_2 = { check_file: v2_check_file, init_io: v2_init_io, new_io: v2_new_io, write_info: v2_write_info, read_dquot: v2_read_dquot, commit_dquot: v2_commit_dquot, scan_dquots: v2_scan_dquots, report: v2_report }; #define getdqbuf() smalloc(V2_DQBLKSIZE) #define freedqbuf(buf) free(buf) /* * Copy dquot from disk to memory */ static void v2r0_disk2memdqblk(struct dquot *dquot, void *dp) { struct util_dqblk *m = &dquot->dq_dqb; struct v2r0_disk_dqblk *d = dp, empty; dquot->dq_id = le32toh(d->dqb_id); m->dqb_ihardlimit = le32toh(d->dqb_ihardlimit); m->dqb_isoftlimit = le32toh(d->dqb_isoftlimit); m->dqb_bhardlimit = le32toh(d->dqb_bhardlimit); m->dqb_bsoftlimit = le32toh(d->dqb_bsoftlimit); m->dqb_curinodes = le32toh(d->dqb_curinodes); m->dqb_curspace = le64toh(d->dqb_curspace); m->dqb_itime = le64toh(d->dqb_itime); m->dqb_btime = le64toh(d->dqb_btime); memset(&empty, 0, sizeof(struct v2r0_disk_dqblk)); empty.dqb_itime = htole64(1); if (!memcmp(&empty, dp, sizeof(struct v2r0_disk_dqblk))) m->dqb_itime = 0; } /* * Copy dquot from memory to disk */ static void v2r0_mem2diskdqblk(void *dp, struct dquot *dquot) { struct util_dqblk *m = &dquot->dq_dqb; struct v2r0_disk_dqblk *d = dp; struct qtree_mem_dqinfo *info = &dquot->dq_h->qh_info.u.v2_mdqi.dqi_qtree; d->dqb_ihardlimit = htole32(m->dqb_ihardlimit); d->dqb_isoftlimit = htole32(m->dqb_isoftlimit); d->dqb_bhardlimit = htole32(m->dqb_bhardlimit); d->dqb_bsoftlimit = htole32(m->dqb_bsoftlimit); d->dqb_curinodes = htole32(m->dqb_curinodes); d->dqb_curspace = htole64(m->dqb_curspace); d->dqb_itime = htole64(m->dqb_itime); d->dqb_btime = htole64(m->dqb_btime); d->dqb_id = htole32(dquot->dq_id); if (qtree_entry_unused(info, dp)) d->dqb_itime = htole64(1); } static int v2r0_is_id(void *dp, struct dquot *dquot) { struct v2r0_disk_dqblk *d = dp; struct qtree_mem_dqinfo *info = &dquot->dq_h->qh_info.u.v2_mdqi.dqi_qtree; if (qtree_entry_unused(info, dp)) return 0; return le32toh(d->dqb_id) == dquot->dq_id; } /* * Copy dquot from disk to memory */ static void v2r1_disk2memdqblk(struct dquot *dquot, void *dp) { struct util_dqblk *m = &dquot->dq_dqb; struct v2r1_disk_dqblk *d = dp, empty; dquot->dq_id = le32toh(d->dqb_id); m->dqb_ihardlimit = le64toh(d->dqb_ihardlimit); m->dqb_isoftlimit = le64toh(d->dqb_isoftlimit); m->dqb_bhardlimit = le64toh(d->dqb_bhardlimit); m->dqb_bsoftlimit = le64toh(d->dqb_bsoftlimit); m->dqb_curinodes = le64toh(d->dqb_curinodes); m->dqb_curspace = le64toh(d->dqb_curspace); m->dqb_itime = le64toh(d->dqb_itime); m->dqb_btime = le64toh(d->dqb_btime); memset(&empty, 0, sizeof(struct v2r1_disk_dqblk)); empty.dqb_itime = htole64(1); if (!memcmp(&empty, dp, sizeof(struct v2r1_disk_dqblk))) m->dqb_itime = 0; } /* * Copy dquot from memory to disk */ static void v2r1_mem2diskdqblk(void *dp, struct dquot *dquot) { struct util_dqblk *m = &dquot->dq_dqb; struct v2r1_disk_dqblk *d = dp; d->dqb_ihardlimit = htole64(m->dqb_ihardlimit); d->dqb_isoftlimit = htole64(m->dqb_isoftlimit); d->dqb_bhardlimit = htole64(m->dqb_bhardlimit); d->dqb_bsoftlimit = htole64(m->dqb_bsoftlimit); d->dqb_curinodes = htole64(m->dqb_curinodes); d->dqb_curspace = htole64(m->dqb_curspace); d->dqb_itime = htole64(m->dqb_itime); d->dqb_btime = htole64(m->dqb_btime); d->dqb_id = htole32(dquot->dq_id); d->dqb_pad = 0; /* Initialize because of qtree_entry_unused() scan */ if (qtree_entry_unused(&dquot->dq_h->qh_info.u.v2_mdqi.dqi_qtree, dp)) d->dqb_itime = htole64(1); } static int v2r1_is_id(void *dp, struct dquot *dquot) { struct v2r1_disk_dqblk *d = dp; struct qtree_mem_dqinfo *info = &dquot->dq_h->qh_info.u.v2_mdqi.dqi_qtree; if (qtree_entry_unused(info, dp)) return 0; return le32toh(d->dqb_id) == dquot->dq_id; } static struct qtree_fmt_operations v2r0_fmt_ops = { .mem2disk_dqblk = v2r0_mem2diskdqblk, .disk2mem_dqblk = v2r0_disk2memdqblk, .is_id = v2r0_is_id, }; static struct qtree_fmt_operations v2r1_fmt_ops = { .mem2disk_dqblk = v2r1_mem2diskdqblk, .disk2mem_dqblk = v2r1_disk2memdqblk, .is_id = v2r1_is_id, }; /* * Copy dqinfo from disk to memory */ static inline void v2_disk2memdqinfo(struct util_dqinfo *m, struct v2_disk_dqinfo *d) { m->dqi_bgrace = le32toh(d->dqi_bgrace); m->dqi_igrace = le32toh(d->dqi_igrace); m->u.v2_mdqi.dqi_flags = le32toh(d->dqi_flags) & V2_DQF_MASK; m->u.v2_mdqi.dqi_qtree.dqi_blocks = le32toh(d->dqi_blocks); m->u.v2_mdqi.dqi_qtree.dqi_free_blk = le32toh(d->dqi_free_blk); m->u.v2_mdqi.dqi_qtree.dqi_free_entry = le32toh(d->dqi_free_entry); } /* * Copy dqinfo from memory to disk */ static inline void v2_mem2diskdqinfo(struct v2_disk_dqinfo *d, struct util_dqinfo *m) { d->dqi_bgrace = htole32(m->dqi_bgrace); d->dqi_igrace = htole32(m->dqi_igrace); d->dqi_flags = htole32(m->u.v2_mdqi.dqi_flags & V2_DQF_MASK); d->dqi_blocks = htole32(m->u.v2_mdqi.dqi_qtree.dqi_blocks); d->dqi_free_blk = htole32(m->u.v2_mdqi.dqi_qtree.dqi_free_blk); d->dqi_free_entry = htole32(m->u.v2_mdqi.dqi_qtree.dqi_free_entry); } /* Convert kernel quotablock format to utility one */ static inline void v2_kern2utildqblk(struct util_dqblk *u, struct v2_kern_dqblk *k) { u->dqb_ihardlimit = k->dqb_ihardlimit; u->dqb_isoftlimit = k->dqb_isoftlimit; u->dqb_bhardlimit = k->dqb_bhardlimit; u->dqb_bsoftlimit = k->dqb_bsoftlimit; u->dqb_curinodes = k->dqb_curinodes; u->dqb_curspace = k->dqb_curspace; u->dqb_itime = k->dqb_itime; u->dqb_btime = k->dqb_btime; } /* Convert utility quotablock format to kernel one */ static inline void v2_util2kerndqblk(struct v2_kern_dqblk *k, struct util_dqblk *u) { k->dqb_ihardlimit = u->dqb_ihardlimit; k->dqb_isoftlimit = u->dqb_isoftlimit; k->dqb_bhardlimit = u->dqb_bhardlimit; k->dqb_bsoftlimit = u->dqb_bsoftlimit; k->dqb_curinodes = u->dqb_curinodes; k->dqb_curspace = u->dqb_curspace; k->dqb_itime = u->dqb_itime; k->dqb_btime = u->dqb_btime; } static int v2_read_header(int fd, struct v2_disk_dqheader *h) { lseek(fd, 0, SEEK_SET); if (read(fd, h, sizeof(struct v2_disk_dqheader)) != sizeof(struct v2_disk_dqheader)) return 0; return 1; } /* * Check whether given quota file is in our format */ static int v2_check_file(int fd, int type, int fmt) { struct v2_disk_dqheader h; int file_magics[] = INITQMAGICS; int known_versions[] = INIT_V2_VERSIONS; int version; if (!v2_read_header(fd, &h)) return 0; if (fmt == QF_VFSV0) version = 0; else if (fmt == QF_VFSV1) version = 1; else return 0; if (le32toh(h.dqh_magic) != file_magics[type]) { if (be32toh(h.dqh_magic) == file_magics[type]) die(3, _("Your quota file is stored in wrong endianity. Please use convertquota(8) to convert it.\n")); return 0; } if (le32toh(h.dqh_version) > known_versions[type]) return 0; if (version != le32toh(h.dqh_version)) return 0; return 1; } /* * Open quotafile */ static int v2_init_io(struct quota_handle *h) { if (QIO_ENABLED(h)) { if (kernel_iface == IFACE_GENERIC) { if (vfs_get_info(h) < 0) return -1; } else { struct v2_kern_dqinfo kdqinfo; if (quotactl(QCMD(Q_V2_GETINFO, h->qh_type), h->qh_quotadev, 0, (void *)&kdqinfo) < 0) { /* Temporary check just before fix gets to kernel */ if (errno == EPERM) /* Don't have permission to get information? */ return 0; return -1; } h->qh_info.dqi_bgrace = kdqinfo.dqi_bgrace; h->qh_info.dqi_igrace = kdqinfo.dqi_igrace; h->qh_info.u.v2_mdqi.dqi_flags = kdqinfo.dqi_flags; h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks = kdqinfo.dqi_blocks; h->qh_info.u.v2_mdqi.dqi_qtree.dqi_free_blk = kdqinfo.dqi_free_blk; h->qh_info.u.v2_mdqi.dqi_qtree.dqi_free_entry = kdqinfo.dqi_free_entry; } } if (h->qh_fd != -1) { struct v2_disk_dqinfo ddqinfo; struct v2_disk_dqheader header; if (!v2_read_header(h->qh_fd, &header)) return -1; lseek(h->qh_fd, V2_DQINFOOFF, SEEK_SET); if (read(h->qh_fd, &ddqinfo, sizeof(ddqinfo)) != sizeof(ddqinfo)) return -1; /* Convert everything */ if (!QIO_ENABLED(h)) v2_disk2memdqinfo(&h->qh_info, &ddqinfo); else /* We need just the number of blocks */ h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks = le32toh(ddqinfo.dqi_blocks); if (le32toh(header.dqh_version) == 0) { h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size = sizeof(struct v2r0_disk_dqblk); h->qh_info.u.v2_mdqi.dqi_qtree.dqi_ops = &v2r0_fmt_ops; h->qh_info.dqi_max_b_limit = ~(uint32_t)0; h->qh_info.dqi_max_i_limit = ~(uint32_t)0; h->qh_info.dqi_max_b_usage = ~(uint64_t)0; h->qh_info.dqi_max_i_usage = ~(uint32_t)0; } else { h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size = sizeof(struct v2r1_disk_dqblk); h->qh_info.u.v2_mdqi.dqi_qtree.dqi_ops = &v2r1_fmt_ops; h->qh_info.dqi_max_b_limit = ~(uint64_t)0; h->qh_info.dqi_max_i_limit = ~(uint64_t)0; h->qh_info.dqi_max_b_usage = ~(uint64_t)0; h->qh_info.dqi_max_i_usage = ~(uint64_t)0; } } else { /* We don't have the file open -> we don't need quota tree operations */ h->qh_info.u.v2_mdqi.dqi_qtree.dqi_ops = NULL; } return 0; } /* * Initialize new quotafile */ static int v2_new_io(struct quota_handle *h) { int file_magics[] = INITQMAGICS; struct v2_disk_dqheader ddqheader; struct v2_disk_dqinfo ddqinfo; int version; if (h->qh_fmt == QF_VFSV0) version = 0; else if (h->qh_fmt == QF_VFSV1) version = 1; else return -1; /* Write basic quota header */ ddqheader.dqh_magic = htole32(file_magics[h->qh_type]); ddqheader.dqh_version = htole32(version); lseek(h->qh_fd, 0, SEEK_SET); if (write(h->qh_fd, &ddqheader, sizeof(ddqheader)) != sizeof(ddqheader)) return -1; /* Write information about quotafile */ h->qh_info.dqi_bgrace = MAX_DQ_TIME; h->qh_info.dqi_igrace = MAX_IQ_TIME; h->qh_info.u.v2_mdqi.dqi_flags = 0; h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks = QT_TREEOFF + 1; h->qh_info.u.v2_mdqi.dqi_qtree.dqi_free_blk = 0; h->qh_info.u.v2_mdqi.dqi_qtree.dqi_free_entry = 0; if (version == 0) { h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size = sizeof(struct v2r0_disk_dqblk); h->qh_info.u.v2_mdqi.dqi_qtree.dqi_ops = &v2r0_fmt_ops; h->qh_info.dqi_max_b_limit = ~(uint32_t)0; h->qh_info.dqi_max_i_limit = ~(uint32_t)0; h->qh_info.dqi_max_b_usage = ~(uint64_t)0; h->qh_info.dqi_max_i_usage = ~(uint32_t)0; } else if (version == 1) { h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size = sizeof(struct v2r1_disk_dqblk); h->qh_info.u.v2_mdqi.dqi_qtree.dqi_ops = &v2r1_fmt_ops; h->qh_info.dqi_max_b_limit = ~(uint64_t)0; h->qh_info.dqi_max_i_limit = ~(uint64_t)0; h->qh_info.dqi_max_b_usage = ~(uint64_t)0; h->qh_info.dqi_max_i_usage = ~(uint64_t)0; } v2_mem2diskdqinfo(&ddqinfo, &h->qh_info); lseek(h->qh_fd, V2_DQINFOOFF, SEEK_SET); if (write(h->qh_fd, &ddqinfo, sizeof(ddqinfo)) != sizeof(ddqinfo)) return -1; return 0; } /* * Write information (grace times to file) */ static int v2_write_info(struct quota_handle *h) { if (QIO_RO(h)) { errstr(_("Trying to write info to readonly quotafile on %s\n"), h->qh_quotadev); errno = EPERM; return -1; } if (QIO_ENABLED(h)) { if (kernel_iface == IFACE_GENERIC) { if (vfs_set_info(h, IIF_BGRACE | IIF_IGRACE)) return -1; } else { struct v2_kern_dqinfo kdqinfo; kdqinfo.dqi_bgrace = h->qh_info.dqi_bgrace; kdqinfo.dqi_igrace = h->qh_info.dqi_igrace; kdqinfo.dqi_flags = h->qh_info.u.v2_mdqi.dqi_flags; kdqinfo.dqi_blocks = h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks; kdqinfo.dqi_free_blk = h->qh_info.u.v2_mdqi.dqi_qtree.dqi_free_blk; kdqinfo.dqi_free_entry = h->qh_info.u.v2_mdqi.dqi_qtree.dqi_free_entry; if (quotactl(QCMD(Q_V2_SETGRACE, h->qh_type), h->qh_quotadev, 0, (void *)&kdqinfo) < 0 || quotactl(QCMD(Q_V2_SETFLAGS, h->qh_type), h->qh_quotadev, 0, (void *)&kdqinfo) < 0) return -1; } } else { struct v2_disk_dqinfo ddqinfo; v2_mem2diskdqinfo(&ddqinfo, &h->qh_info); lseek(h->qh_fd, V2_DQINFOOFF, SEEK_SET); if (write(h->qh_fd, &ddqinfo, sizeof(ddqinfo)) != sizeof(ddqinfo)) return -1; } return 0; } /* * Read dquot (either from disk or from kernel) * User can use errno to detect errstr when NULL is returned */ static struct dquot *v2_read_dquot(struct quota_handle *h, qid_t id) { if (QIO_ENABLED(h)) { struct dquot *dquot = get_empty_dquot(); dquot->dq_id = id; dquot->dq_h = h; dquot->dq_dqb.u.v2_mdqb.dqb_off = 0; memset(&dquot->dq_dqb, 0, sizeof(struct util_dqblk)); if (kernel_iface == IFACE_GENERIC) { if (vfs_get_dquot(dquot) < 0) { free(dquot); return NULL; } } else { struct v2_kern_dqblk kdqblk; if (quotactl(QCMD(Q_V2_GETQUOTA, h->qh_type), h->qh_quotadev, id, (void *)&kdqblk) < 0) { free(dquot); return NULL; } v2_kern2utildqblk(&dquot->dq_dqb, &kdqblk); } return dquot; } return qtree_read_dquot(h, id); } /* * Commit changes of dquot to disk - it might also mean deleting it when quota became fake one and user has no blocks... * User can process use 'errno' to detect errstr */ static int v2_commit_dquot(struct dquot *dquot, int flags) { struct util_dqblk *b = &dquot->dq_dqb; if (QIO_RO(dquot->dq_h)) { errstr(_("Trying to write quota to readonly quotafile on %s\n"), dquot->dq_h->qh_quotadev); errno = EPERM; return -1; } if (QIO_ENABLED(dquot->dq_h)) { if (kernel_iface == IFACE_GENERIC) { if (vfs_set_dquot(dquot, flags) < 0) return -1; } else { struct v2_kern_dqblk kdqblk; int cmd; if (flags == COMMIT_USAGE) cmd = Q_V2_SETUSE; else if (flags == COMMIT_LIMITS) cmd = Q_V2_SETQLIM; else if (flags & COMMIT_TIMES) { errno = EINVAL; return -1; } else cmd = Q_V2_SETQUOTA; v2_util2kerndqblk(&kdqblk, &dquot->dq_dqb); if (quotactl(QCMD(cmd, dquot->dq_h->qh_type), dquot->dq_h->qh_quotadev, dquot->dq_id, (void *)&kdqblk) < 0) return -1; } return 0; } if (!b->dqb_curspace && !b->dqb_curinodes && !b->dqb_bsoftlimit && !b->dqb_isoftlimit && !b->dqb_bhardlimit && !b->dqb_ihardlimit) qtree_delete_dquot(dquot); else { if (check_dquot_range(dquot) < 0) { errno = ERANGE; return -1; } qtree_write_dquot(dquot); } return 0; } static int v2_scan_dquots(struct quota_handle *h, int (*process_dquot) (struct dquot *, char *)) { return qtree_scan_dquots(h, process_dquot); } /* Report information about quotafile */ static int v2_report(struct quota_handle *h, int verbose) { if (verbose) { struct v2_mem_dqinfo *info = &h->qh_info.u.v2_mdqi; printf(_("Statistics:\nTotal blocks: %u\nData blocks: %u\nEntries: %u\nUsed average: %f\n"), info->dqi_qtree.dqi_blocks, info->dqi_data_blocks, info->dqi_used_entries, ((float)info->dqi_used_entries) / info->dqi_data_blocks); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_v2.h�����������������������������������������������������������������������������0000664�0000000�0000000�00000006266�14463210551�0015053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Header file for disk format of new quotafile format * */ #ifndef GUARD_QUOTAIO_V2_H #define GUARD_QUOTAIO_V2_H #include <sys/types.h> #include "quota.h" #define V2_DQINFOOFF sizeof(struct v2_disk_dqheader) /* Offset of info header in file */ #define INIT_V2_VERSIONS { 1, 1} struct v2_disk_dqheader { u_int32_t dqh_magic; /* Magic number identifying file */ u_int32_t dqh_version; /* File version */ } __attribute__ ((packed)); /* Flags for version specific files */ #define V2_DQF_MASK 0x0000 /* Mask for all valid ondisk flags */ /* Header with type and version specific information */ struct v2_disk_dqinfo { u_int32_t dqi_bgrace; /* Time before block soft limit becomes hard limit */ u_int32_t dqi_igrace; /* Time before inode soft limit becomes hard limit */ u_int32_t dqi_flags; /* Flags for quotafile (DQF_*) */ u_int32_t dqi_blocks; /* Number of blocks in file */ u_int32_t dqi_free_blk; /* Number of first free block in the list */ u_int32_t dqi_free_entry; /* Number of block with at least one free entry */ } __attribute__ ((packed)); /* Structure of quota for one user on disk */ struct v2r0_disk_dqblk { u_int32_t dqb_id; /* id this quota applies to */ u_int32_t dqb_ihardlimit; /* absolute limit on allocated inodes */ u_int32_t dqb_isoftlimit; /* preferred inode limit */ u_int32_t dqb_curinodes; /* current # allocated inodes */ u_int32_t dqb_bhardlimit; /* absolute limit on disk space (in QUOTABLOCK_SIZE) */ u_int32_t dqb_bsoftlimit; /* preferred limit on disk space (in QUOTABLOCK_SIZE) */ u_int64_t dqb_curspace; /* current space occupied (in bytes) */ u_int64_t dqb_btime; /* time limit for excessive disk use */ u_int64_t dqb_itime; /* time limit for excessive inode use */ } __attribute__ ((packed)); struct v2r1_disk_dqblk { u_int32_t dqb_id; /* id this quota applies to */ u_int32_t dqb_pad; u_int64_t dqb_ihardlimit; /* absolute limit on allocated inodes */ u_int64_t dqb_isoftlimit; /* preferred inode limit */ u_int64_t dqb_curinodes; /* current # allocated inodes */ u_int64_t dqb_bhardlimit; /* absolute limit on disk space (in QUOTABLOCK_SIZE) */ u_int64_t dqb_bsoftlimit; /* preferred limit on disk space (in QUOTABLOCK_SIZE) */ u_int64_t dqb_curspace; /* current space occupied (in bytes) */ u_int64_t dqb_btime; /* time limit for excessive disk use */ u_int64_t dqb_itime; /* time limit for excessive inode use */ } __attribute__ ((packed)); /* Structure of quota for communication with kernel */ struct v2_kern_dqblk { unsigned int dqb_ihardlimit; unsigned int dqb_isoftlimit; unsigned int dqb_curinodes; unsigned int dqb_bhardlimit; unsigned int dqb_bsoftlimit; qsize_t dqb_curspace; time_t dqb_btime; time_t dqb_itime; }; /* Structure of quotafile info for communication with kernel (obsolete) */ struct v2_kern_dqinfo { unsigned int dqi_bgrace; unsigned int dqi_igrace; unsigned int dqi_flags; unsigned int dqi_blocks; unsigned int dqi_free_blk; unsigned int dqi_free_entry; }; /* Structure with gathered statistics from kernel */ struct v2_dqstats { u_int32_t lookups; u_int32_t drops; u_int32_t reads; u_int32_t writes; u_int32_t cache_hits; u_int32_t allocated_dquots; u_int32_t free_dquots; u_int32_t syncs; u_int32_t version; }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_xfs.c����������������������������������������������������������������������������0000664�0000000�0000000�00000025036�14463210551�0015313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Implementation of XFS quota manager. * Copyright (c) 2001 Silicon Graphics, Inc. */ #include "config.h" #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include "pot.h" #include "common.h" #include "bylabel.h" #include "quotaio.h" #include "quotasys.h" #include "dqblk_xfs.h" #include "quotaio_generic.h" #define XFS_USRQUOTA(h) ((h)->qh_type == USRQUOTA && \ (h)->qh_info.u.xfs_mdqi.qs_flags & XFS_QUOTA_UDQ_ACCT) #define XFS_GRPQUOTA(h) ((h)->qh_type == GRPQUOTA && \ (h)->qh_info.u.xfs_mdqi.qs_flags & XFS_QUOTA_GDQ_ACCT) #define XFS_PRJQUOTA(h) ((h)->qh_type == PRJQUOTA && \ (h)->qh_info.u.xfs_mdqi.qs_flags & XFS_QUOTA_PDQ_ACCT) static int xfs_init_io(struct quota_handle *h); static int xfs_write_info(struct quota_handle *h); static struct dquot *xfs_read_dquot(struct quota_handle *h, qid_t id); static int xfs_commit_dquot(struct dquot *dquot, int flags); static int xfs_scan_dquots(struct quota_handle *h, int (*process_dquot) (struct dquot *dquot, char *dqname)); static int xfs_report(struct quota_handle *h, int verbose); struct quotafile_ops quotafile_ops_xfs = { init_io: xfs_init_io, write_info: xfs_write_info, read_dquot: xfs_read_dquot, commit_dquot: xfs_commit_dquot, scan_dquots: xfs_scan_dquots, report: xfs_report }; static inline time_t xfs_kern2utildqblk_ts(const struct xfs_kern_dqblk *k, __s32 timer, __s8 timer_hi) { #if SIZEOF_TIME_T > 4 if (k->d_fieldmask & FS_DQ_BIGTIME) return (__u32)timer | (__s64)timer_hi << 32; #else if (k->d_fieldmask & FS_DQ_BIGTIME && timer_hi != 0) errstr(_("Truncating kernel returned time stamp.")); #endif return timer; } static inline void xfs_util2kerndqblk_ts(const struct xfs_kern_dqblk *k, __s32 *timer_lo, __s8 *timer_hi, time_t timer) { *timer_lo = timer; #if SIZEOF_TIME_T > 4 if (k->d_fieldmask & FS_DQ_BIGTIME) *timer_hi = timer >> 32; else *timer_hi = 0; #else *timer_hi = 0; #endif } static inline int want_bigtime(time_t timer) { return timer > INT32_MAX || timer < INT32_MIN; } static inline int timer_fits_xfs_dqblk(time_t timer) { return timer >= FS_DQUOT_TIMER_MIN && timer <= FS_DQUOT_TIMER_MAX; } /* * Convert XFS kernel quota format to utility format */ static inline void xfs_kern2utildqblk(struct util_dqblk *u, struct xfs_kern_dqblk * k) { u->dqb_ihardlimit = k->d_ino_hardlimit; u->dqb_isoftlimit = k->d_ino_softlimit; u->dqb_bhardlimit = k->d_blk_hardlimit >> 1; u->dqb_bsoftlimit = k->d_blk_softlimit >> 1; u->dqb_curinodes = k->d_icount; u->dqb_curspace = ((qsize_t)k->d_bcount) << 9; u->dqb_itime = xfs_kern2utildqblk_ts(k, k->d_itimer, k->d_itimer_hi); u->dqb_btime = xfs_kern2utildqblk_ts(k, k->d_btimer, k->d_btimer_hi); } /* * Convert utility quota format to XFS kernel format */ static inline int xfs_util2kerndqblk(struct xfs_kern_dqblk *k, struct util_dqblk *u) { memset(k, 0, sizeof(struct xfs_kern_dqblk)); k->d_ino_hardlimit = u->dqb_ihardlimit; k->d_ino_softlimit = u->dqb_isoftlimit; k->d_blk_hardlimit = u->dqb_bhardlimit << 1; k->d_blk_softlimit = u->dqb_bsoftlimit << 1; k->d_icount = u->dqb_curinodes; k->d_bcount = u->dqb_curspace >> 9; if (!timer_fits_xfs_dqblk(u->dqb_itime) || !timer_fits_xfs_dqblk(u->dqb_btime)) { errno = ERANGE; return -1; } if (want_bigtime(u->dqb_itime) || want_bigtime(u->dqb_btime)) k->d_fieldmask |= FS_DQ_BIGTIME; xfs_util2kerndqblk_ts(k, &k->d_itimer, &k->d_itimer_hi, u->dqb_itime); xfs_util2kerndqblk_ts(k, &k->d_btimer, &k->d_btimer_hi, u->dqb_btime); return 0; } /* * Initialize quota information */ static int xfs_init_io(struct quota_handle *h) { struct xfs_mem_dqinfo info; int qcmd; qcmd = QCMD(Q_XFS_GETQSTAT, h->qh_type); memset(&info, 0, sizeof(struct xfs_mem_dqinfo)); if (quotactl(qcmd, h->qh_quotadev, 0, (void *)&info) < 0) return -1; h->qh_info.dqi_bgrace = info.qs_btimelimit; h->qh_info.dqi_igrace = info.qs_itimelimit; h->qh_info.u.xfs_mdqi = info; return 0; } /* * Write information (grace times) */ static int xfs_write_info(struct quota_handle *h) { struct xfs_kern_dqblk xdqblk; int qcmd; if (!XFS_USRQUOTA(h) && !XFS_GRPQUOTA(h) && !XFS_PRJQUOTA(h)) return 0; memset(&xdqblk, 0, sizeof(struct xfs_kern_dqblk)); xdqblk.d_btimer = h->qh_info.dqi_bgrace; xdqblk.d_itimer = h->qh_info.dqi_igrace; xdqblk.d_fieldmask |= FS_DQ_TIMER_MASK; qcmd = QCMD(Q_XFS_SETQLIM, h->qh_type); if (quotactl(qcmd, h->qh_quotadev, 0, (void *)&xdqblk) < 0) return -1; return 0; } /* * Read a dqblk struct from the quota manager */ static struct dquot *xfs_read_dquot(struct quota_handle *h, qid_t id) { struct dquot *dquot = get_empty_dquot(); struct xfs_kern_dqblk xdqblk; int qcmd; dquot->dq_id = id; dquot->dq_h = h; if (!XFS_USRQUOTA(h) && !XFS_GRPQUOTA(h) && !XFS_PRJQUOTA(h)) return dquot; qcmd = QCMD(Q_XFS_GETQUOTA, h->qh_type); if (quotactl(qcmd, h->qh_quotadev, id, (void *)&xdqblk) < 0) { ; } else { xfs_kern2utildqblk(&dquot->dq_dqb, &xdqblk); } return dquot; } /* * Write a dqblk struct to the XFS quota manager */ static int xfs_commit_dquot(struct dquot *dquot, int flags) { struct quota_handle *h = dquot->dq_h; struct xfs_kern_dqblk xdqblk; qid_t id = dquot->dq_id; int qcmd; if (!XFS_USRQUOTA(h) && !XFS_GRPQUOTA(h) && !XFS_PRJQUOTA(h)) return 0; if (xfs_util2kerndqblk(&xdqblk, &dquot->dq_dqb) < 0) return -1; if (XFS_USRQUOTA(h)) xdqblk.d_flags |= XFS_USER_QUOTA; else if (XFS_GRPQUOTA(h)) xdqblk.d_flags |= XFS_GROUP_QUOTA; else if (XFS_PRJQUOTA(h)) xdqblk.d_flags |= XFS_PROJ_QUOTA; xdqblk.d_id = id; if (strcmp(h->qh_fstype, MNTTYPE_GFS2) == 0) { if (flags & COMMIT_LIMITS) /* warn/limit */ xdqblk.d_fieldmask |= FS_DQ_BSOFT | FS_DQ_BHARD; if (flags & COMMIT_USAGE) /* block usage */ xdqblk.d_fieldmask |= FS_DQ_BCOUNT; } else { if (flags & COMMIT_LIMITS) /* warn/limit */ xdqblk.d_fieldmask |= FS_DQ_BSOFT | FS_DQ_BHARD | FS_DQ_ISOFT | FS_DQ_IHARD; if (flags & COMMIT_TIMES) /* indiv grace period */ xdqblk.d_fieldmask |= FS_DQ_TIMER_MASK; } qcmd = QCMD(Q_XFS_SETQLIM, h->qh_type); if (quotactl(qcmd, h->qh_quotadev, id, (void *)&xdqblk) < 0) return -1; return 0; } /* * xfs_scan_dquots helper - processes a single dquot */ static int xfs_get_dquot(struct dquot *dq) { struct xfs_kern_dqblk d; int qcmd = QCMD(Q_XFS_GETQUOTA, dq->dq_h->qh_type); int ret; memset(&d, 0, sizeof(d)); ret = quotactl(qcmd, dq->dq_h->qh_quotadev, dq->dq_id, (void *)&d); if (ret < 0) { if (errno == ENOENT) return 0; return -1; } xfs_kern2utildqblk(&dq->dq_dqb, &d); return 0; } static int xfs_kernel_scan_dquots(struct quota_handle *h, int (*process_dquot)(struct dquot *dquot, char *dqname)) { struct dquot *dquot = get_empty_dquot(); qid_t id = 0; struct xfs_kern_dqblk xdqblk; int ret; dquot->dq_h = h; while (1) { ret = quotactl(QCMD(Q_XGETNEXTQUOTA, h->qh_type), h->qh_quotadev, id, (void *)&xdqblk); if (ret < 0) break; xfs_kern2utildqblk(&dquot->dq_dqb, &xdqblk); dquot->dq_id = xdqblk.d_id; ret = process_dquot(dquot, NULL); if (ret < 0) break; id = xdqblk.d_id + 1; /* id -1 is invalid and the last one... */ if (id == -1) { errno = ENOENT; break; } } free(dquot); if (errno == ENOENT) return 0; return ret; } /* * Scan all known dquots and call callback on each */ static int xfs_scan_dquots(struct quota_handle *h, int (*process_dquot) (struct dquot *dquot, char *dqname)) { int ret; struct xfs_kern_dqblk xdqblk; ret = quotactl(QCMD(Q_XGETNEXTQUOTA, h->qh_type), h->qh_quotadev, 0, (void *)&xdqblk); if (ret < 0 && (errno == ENOSYS || errno == EINVAL)) { if (!XFS_USRQUOTA(h) && !XFS_GRPQUOTA(h) && !XFS_PRJQUOTA(h)) return 0; return generic_scan_dquots(h, process_dquot, xfs_get_dquot); } return xfs_kernel_scan_dquots(h, process_dquot); } /* * Report information about XFS quota on given filesystem */ static int xfs_report(struct quota_handle *h, int verbose) { u_int16_t sbflags; struct xfs_mem_dqinfo *info = &h->qh_info.u.xfs_mdqi; if (!verbose) return 0; /* quotaon/off flags */ printf(_("*** Status for %s quotas on device %s\n"), type2name(h->qh_type), h->qh_quotadev); #define XQM_ON(flag) ((info->qs_flags & (flag)) ? _("ON") : _("OFF")) if (h->qh_type == USRQUOTA) { printf(_("Accounting: %s; Enforcement: %s\n"), XQM_ON(XFS_QUOTA_UDQ_ACCT), XQM_ON(XFS_QUOTA_UDQ_ENFD)); } else if (h->qh_type == GRPQUOTA) { printf(_("Accounting: %s; Enforcement: %s\n"), XQM_ON(XFS_QUOTA_GDQ_ACCT), XQM_ON(XFS_QUOTA_GDQ_ENFD)); } else if (h->qh_type == PRJQUOTA) { printf(_("Accounting: %s; Enforcement: %s\n"), XQM_ON(XFS_QUOTA_PDQ_ACCT), XQM_ON(XFS_QUOTA_PDQ_ENFD)); } #undef XQM_ON /* * If this is the root file system, it is possible that quotas are * on ondisk, but not incore. Those flags will be in the HI 8 bits. */ #define XQM_ONDISK(flag) ((sbflags & (flag)) ? _("ON") : _("OFF")) if ((sbflags = (info->qs_flags & 0xff00) >> 8) != 0) { if (h->qh_type == USRQUOTA) { printf(_("Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n"), XQM_ONDISK(XFS_QUOTA_UDQ_ACCT), XQM_ONDISK(XFS_QUOTA_UDQ_ENFD)); } else if (h->qh_type == GRPQUOTA) { printf(_("Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n"), XQM_ONDISK(XFS_QUOTA_GDQ_ACCT), XQM_ONDISK(XFS_QUOTA_GDQ_ENFD)); } else if (h->qh_type == PRJQUOTA) { printf(_("Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n"), XQM_ONDISK(XFS_QUOTA_PDQ_ACCT), XQM_ONDISK(XFS_QUOTA_PDQ_ENFD)); } #undef XQM_ONDISK } /* user and group quota file status information */ if (h->qh_type == USRQUOTA) { if (info->qs_uquota.qfs_ino == -1 || info->qs_uquota.qfs_ino == 0) printf(_("Inode: none\n")); else printf(_("Inode: #%llu (%llu blocks, %u extents)\n"), (unsigned long long)info->qs_uquota.qfs_ino, (unsigned long long)info->qs_uquota.qfs_nblks, info->qs_uquota.qfs_nextents); } else if (h->qh_type == GRPQUOTA) { if (info->qs_gquota.qfs_ino == -1) printf(_("Inode: none\n")); else printf(_("Inode: #%llu (%llu blocks, %u extents)\n"), (unsigned long long)info->qs_gquota.qfs_ino, (unsigned long long)info->qs_gquota.qfs_nblks, info->qs_gquota.qfs_nextents); } else if (h->qh_type == PRJQUOTA) { /* * FIXME: Older XFS use group files for project quotas, newer * have dedicated file and we should detect that. */ if (info->qs_gquota.qfs_ino == -1) printf(_("Inode: none\n")); else printf(_("Inode: #%llu (%llu blocks, %u extents)\n"), (unsigned long long)info->qs_gquota.qfs_ino, (unsigned long long)info->qs_gquota.qfs_nblks, info->qs_gquota.qfs_nextents); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaio_xfs.h����������������������������������������������������������������������������0000664�0000000�0000000�00000015577�14463210551�0015331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * Further, this software is distributed without any warranty that it is * free of the rightful claim of any third person regarding infringement * or the like. Any license provided herein, whether implied or * otherwise, applies only to this software file. Patent licenses, if * any, provided herein do not apply to combinations of this program with * other software, or any other product whatsoever. * * You should have received a copy of the GNU General Public License along * with this program; if not, write the Free Software Foundation, Inc., 59 * Temple Place - Suite 330, Boston MA 02111-1307, USA. * * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, * Mountain View, CA 94043, or: * * http://www.sgi.com * * For further information regarding this notice, see: * * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ */ #ifndef GUARD_QUOTAIO_XFS_H #define GUARD_QUOTAIO_XFS_H #include <asm/types.h> #define XQM_CMD(cmd) ( ('X'<<8)+(cmd) ) #define IS_XQM_CMD(cmd) ( ((int)(cmd)>>8) == 'X' ) /* * Disk quota - quotactl(2) commands for XFS Quota Manager (XQM). */ #define Q_XQUOTAON XQM_CMD(0x1) /* enable quota accounting/enforcement */ #define Q_XQUOTAOFF XQM_CMD(0x2) /* disable quota accounting/enforcement */ #define Q_XGETQUOTA XQM_CMD(0x3) /* get disk limits & usage */ #define Q_XSETQLIM XQM_CMD(0x4) /* set disk limits only */ #define Q_XGETQSTAT XQM_CMD(0x5) /* returns fs_quota_stat_t struct */ #define Q_XQUOTARM XQM_CMD(0x6) /* free quota files' space */ #define Q_XGETNEXTQUOTA XQM_CMD(0x9) /* get disk limits and usage >= ID */ /* * fs_disk_quota structure: * * This contains the current quota information regarding a user/proj/group. * It is 64-bit aligned, and all the blk units are in BBs (Basic Blocks) of * 512 bytes. */ #define FS_DQUOT_VERSION 1 /* fs_disk_quota.d_version */ typedef struct fs_disk_quota { __s8 d_version; /* version of this structure */ __s8 d_flags; /* XFS_{USER,PROJ,GROUP}_QUOTA */ __u16 d_fieldmask; /* field specifier */ __u32 d_id; /* user, project, or group ID */ __u64 d_blk_hardlimit; /* absolute limit on disk blks */ __u64 d_blk_softlimit; /* preferred limit on disk blks */ __u64 d_ino_hardlimit; /* maximum # allocated inodes */ __u64 d_ino_softlimit; /* preferred inode limit */ __u64 d_bcount; /* # disk blocks owned by the user */ __u64 d_icount; /* # inodes owned by the user */ __s32 d_itimer; /* zero if within inode limits */ /* if not, we refuse service */ __s32 d_btimer; /* similar to above; for disk blocks */ __u16 d_iwarns; /* # warnings issued wrt num inodes */ __u16 d_bwarns; /* # warnings issued wrt disk blocks */ __s8 d_itimer_hi; /* upper 8 bits of timer values */ __s8 d_btimer_hi; __s8 d_rtbtimer_hi; __s8 d_padding2; /* padding2 - for future use */ __u64 d_rtb_hardlimit; /* absolute limit on realtime blks */ __u64 d_rtb_softlimit; /* preferred limit on RT disk blks */ __u64 d_rtbcount; /* # realtime blocks owned */ __s32 d_rtbtimer; /* similar to above; for RT disk blks */ __u16 d_rtbwarns; /* # warnings issued wrt RT disk blks */ __s16 d_padding3; /* padding3 - for future use */ char d_padding4[8]; /* yet more padding */ } fs_disk_quota_t; #define FS_DQUOT_TIMER_MAX (((__s64)1 << 39) - 1) #define FS_DQUOT_TIMER_MIN (-((__s64)1 << 39)) /* * These fields are sent to Q_XSETQLIM to specify fields that need to change. */ #define FS_DQ_ISOFT (1<<0) #define FS_DQ_IHARD (1<<1) #define FS_DQ_BSOFT (1<<2) #define FS_DQ_BHARD (1<<3) #define FS_DQ_RTBSOFT (1<<4) #define FS_DQ_RTBHARD (1<<5) #define FS_DQ_LIMIT_MASK (FS_DQ_ISOFT | FS_DQ_IHARD | FS_DQ_BSOFT | \ FS_DQ_BHARD | FS_DQ_RTBSOFT | FS_DQ_RTBHARD) /* * These timers can only be set in super user's dquot. For others, timers are * automatically started and stopped. Superusers timer values set the limits * for the rest. In case these values are zero, the DQ_{F,B}TIMELIMIT values * defined below are used. * These values also apply only to the d_fieldmask field for Q_XSETQLIM. */ #define FS_DQ_BTIMER (1<<6) #define FS_DQ_ITIMER (1<<7) #define FS_DQ_RTBTIMER (1<<8) #define FS_DQ_TIMER_MASK (FS_DQ_BTIMER | FS_DQ_ITIMER | FS_DQ_RTBTIMER) /* * Accounting values. These can only be set for filesystem with * non-transactional quotas that require quotacheck(8) in userspace. */ #define FS_DQ_BCOUNT (1<<12) #define FS_DQ_ICOUNT (1<<13) #define FS_DQ_RTBCOUNT (1<<14) #define FS_DQ_ACCT_MASK (FS_DQ_BCOUNT | FS_DQ_ICOUNT | FS_DQ_RTBCOUNT) /* * Quota expiration timestamps are 40-bit signed integers, with the upper 8 * bits encoded in the _hi fields. */ #define FS_DQ_BIGTIME (1<<15) /* * Various flags related to quotactl(2). Only relevant to XFS filesystems. */ #define XFS_QUOTA_UDQ_ACCT (1<<0) /* user quota accounting */ #define XFS_QUOTA_UDQ_ENFD (1<<1) /* user quota limits enforcement */ #define XFS_QUOTA_GDQ_ACCT (1<<2) /* group quota accounting */ #define XFS_QUOTA_GDQ_ENFD (1<<3) /* group quota limits enforcement */ #define XFS_QUOTA_PDQ_ACCT (1<<4) /* group quota accounting */ #define XFS_QUOTA_PDQ_ENFD (1<<5) /* group quota limits enforcement */ #define XFS_USER_QUOTA (1<<0) /* user quota type */ #define XFS_PROJ_QUOTA (1<<1) /* (IRIX) project quota type */ #define XFS_GROUP_QUOTA (1<<2) /* group quota type */ /* * fs_quota_stat is the struct returned in Q_XGETQSTAT for a given file system. * Provides a centralized way to get meta infomation about the quota subsystem. * eg. space taken up for user and group quotas, number of dquots currently * incore. */ #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ /* * Some basic infomation about 'quota files'. */ typedef struct fs_qfilestat { __u64 qfs_ino; /* inode number */ __u64 qfs_nblks; /* number of BBs 512-byte-blks */ __u32 qfs_nextents; /* number of extents */ } fs_qfilestat_t; typedef struct fs_quota_stat { __s8 qs_version; /* version number for future changes */ __u16 qs_flags; /* XFS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ __s8 qs_pad; /* unused */ fs_qfilestat_t qs_uquota; /* user quota storage information */ fs_qfilestat_t qs_gquota; /* group quota storage information */ __u32 qs_incoredqs; /* number of dquots incore */ __s32 qs_btimelimit; /* limit for blks timer */ __s32 qs_itimelimit; /* limit for inodes timer */ __s32 qs_rtbtimelimit; /* limit for rt blks timer */ __u16 qs_bwarnlimit; /* limit for num warnings */ __u16 qs_iwarnlimit; /* limit for num warnings */ } fs_quota_stat_t; #endif /* GUARD_QUOTAIO_XFS_H */ ���������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaon.8��������������������������������������������������������������������������������0000664�0000000�0000000�00000014353�14463210551�0014365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH QUOTAON 8 .UC 4 .SH NAME quotaon, quotaoff \- turn filesystem quotas on and off .SH SYNOPSIS .B quotaon [ .B \-vugfp ] [ .B \-F .I format-name ] .IR filesystem .\|.\|. .br .B quotaon [ .B \-avugPfp ] [ .B \-F .I format-name ] .LP .B quotaoff [ .B \-vugPp ] [ .B \-x .I state ] .IR filesystem .\|.\|. .br .B quotaoff [ .B \-avugp ] .SH DESCRIPTION .SS quotaon .IX "quotaon command" "" "\fLquotaon\fP \(em turn filesystem quotas on" .IX "user quotas" "quotaon command" "" "\fLquotaon\fP \(em turn filesystem quotas on" .IX "disk quotas" "quotaon command" "" "\fLquotaon\fP \(em turn filesystem quotas on" .IX "quotas" "quotaon command" "" "\fLquotaon\fP \(em turn filesystem quotas on" .IX "filesystem" "quotaon command" "" "\fLquotaon\fP \(em turn filesystem quotas on" .LP .B quotaon announces to the system that disk quotas should be enabled on one or more filesystems. The filesystem quota files must be present in the root directory of the specified filesystem and be named either .IR aquota.user (for version 2 user quota), .IR quota.user (for version 1 user quota), .IR aquota.group (for version 2 group quota), or .IR quota.group (for version 1 group quota). .PP XFS filesystems are a special case - XFS considers quota information as filesystem metadata and uses journaling to provide a higher level guarantee of consistency. There are two components to the XFS disk quota system: accounting and limit enforcement. XFS filesystems require that quota accounting be turned on at mount time. It is possible to enable and disable limit enforcement on an XFS filesystem after quota accounting is already turned on. The default is to turn on both accounting and enforcement. .PP The XFS quota implementation does not maintain quota information in user-visible files, but rather stores this information internally. .SS quotaoff .IX "quotaoff command" "" "\fLquotaoff\fP \(em turn filesystem quotas off" .IX "user quotas" "quotaoff command" "" "\fLquotaoff\fP \(em turn filesystem quotas off" .IX "disk quotas" "quotaoff command" "" "\fLquotaoff\fP \(em turn filesystem quotas off" .IX "quotas" "quotaoff command" "" "\fLquotaoff\fP \(em turn filesystem quotas off" .IX "filesystem" "quotaoff command" "" "\fLquotaoff\fP \(em turn filesystem quotas off" .LP .B quotaoff announces to the system that the specified filesystems should have any disk quotas turned off. .SH OPTIONS .SS quotaon .TP .B -F, --format=\f2format-name\f1 Report quota for specified format (ie. don't perform format autodetection). Possible format names are: .B vfsold Original quota format with 16-bit UIDs / GIDs, .B vfsv0 Quota format with 32-bit UIDs / GIDs, 64-bit space usage, 32-bit inode usage and limits, .B vfsv1 Quota format with 64-bit quota limits and usage, .B xfs (quota on XFS filesystem) .TP .B -a, --all All automatically mounted (no .B noauto option) non-NFS filesystems in .B /etc/fstab with quotas will have their quotas turned on. This is normally used at boot time to enable quotas. .TP .B -v, --verbose Display a message for each filesystem where quotas are turned on. .TP .B -u, --user Manipulate user quotas. This is the default. .TP .B -g, --group Manipulate group quotas. .TP .B -P, --project Manipulate project quotas. .TP .B -p, --print-state Instead of turning quotas on just print state of quotas (ie. whether. quota is on or off) .TP .B -x, --xfs-command enforce Switch on limit enforcement for XFS filesystems. This is the default action for any XFS filesystem. This option is only applicable to XFS, and is silently ignored for other filesystem types. .TP .B -f, --off Make .B quotaon behave like being called as .BR quotaoff . .SS quotaoff .TP .B -F, --format=\f2format-name\f1 Report quota for specified format (ie. don't perform format autodetection). Possible format names are: .B vfsold (version 1 quota), .B vfsv0 (version 2 quota), .B xfs (quota on XFS filesystem) .TP .B -a, --all Force all filesystems in .B /etc/fstab to have their quotas disabled. .TP .B -v, --verbose Display a message for each filesystem affected. .TP .B -u, --user Manipulate user quotas. This is the default. .TP .B -g, --group Manipulate group quotas. .TP .B -P, --project Manipulate project quotas. .TP .B -p, --print-state Instead of turning quotas off just print state of quotas (ie. whether. quota is on or off) .TP .B -x, --xfs-command delete Free up the space used to hold quota information (maintained internally) within XFS. This option is only applicable to XFS, and is silently ignored for other filesystem types. It can only be used on a filesystem with quota previously turned off. .TP .B -x, --xfs-command enforce Switch off limit enforcement for XFS filesystems (perform quota accounting only). This is the default action for any XFS filesystem. This option is only applicable to XFS, and is silently ignored for other filesystem types. .TP .B -x, --xfs-command account This option can be used to disable quota accounting. It is not possible to enable quota accounting by quota tools. Use .IR mount (8) for that. This option is only applicable to XFS filesystems, and is silently ignored for other filesystem types. .SH "NOTES ON XFS FILESYSTEMS" To enable quotas on an XFS filesystem, use .IR mount (8) or .B /etc/fstab quota option to enable both accounting and limit enforcement. .B quotaon utility cannot be used for this purpose. .PP Turning on quotas on an XFS root filesystem requires the quota mount options be passed into the kernel at boot time through the Linux .B rootflags boot option. .PP To turn off quota limit enforcement on any XFS filesystem, first make sure that quota accounting and enforcement are both turned on using .B "repquota -v" .IR filesystem . Then, use .B "quotaoff -v .I filesystem to disable limit enforcement. This may be done while the filesystem is mounted. .PP Turning on quota limit enforcement on an XFS filesystem is achieved using .B "quotaon -v" .IR filesystem . This may be done while the filesystem is mounted. .SH FILES .PD 0 .TP 20 .B aquota.user or aquota.group quota file at the filesystem root (version 2 quota, non-XFS filesystems) .TP .B quota.user or quota.group quota file at the filesystem root (version 1 quota, non-XFS filesystems) .TP .B /etc/fstab default filesystems .PD .SH "SEE ALSO" .BR quotactl (2), .BR fstab (5), .BR quota_nld (8), .BR repquota (8), .BR warnquota (8) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaon.c��������������������������������������������������������������������������������0000664�0000000�0000000�00000025123�14463210551�0014435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Utility for turning quotas on and off and reporting their state. */ #include "config.h" /* * Turn quota on/off for a filesystem. */ #include <stdio.h> #include <errno.h> #include <getopt.h> #include <string.h> #include <stdlib.h> #include <stdarg.h> #include "quotaon.h" #include "quota.h" #include "quotasys.h" #define FL_USER 1 #define FL_GROUP 2 #define FL_VERBOSE 4 #define FL_ALL 8 #define FL_STAT 16 #define FL_OFF 32 #define FL_PROJECT 64 static int flags, fmt = -1; char *progname; static char **mntpoints; static int mntcnt; static char *xarg = NULL; static void usage(void) { errstr(_("Usage:\n\t%s [-guPvp] [-F quotaformat] [-x state] -a\n\ \t%s [-guPvp] [-F quotaformat] [-x state] filesys ...\n\n\ -a, --all %s\n\ -f, --off turn quotas off\n\ -u, --user operate on user quotas\n\ -g, --group operate on group quotas\n\ -P, --project operate on project quotas\n\ -p, --print-state print whether quotas are on or off\n\ -x, --xfs-command=cmd perform XFS quota command\n\ -F, --format=formatname operate on specific quota format\n\ -v, --verbose print more messages\n\ -h, --help display this help text and exit\n\ -V, --version display version information and exit\n"), progname, progname, strcmp(progname, "quotaon") ? _("turn quotas off for all filesystems") : _("turn quotas on for all filesystems")); exit(1); } static void parse_options(int argcnt, char **argstr) { int c; struct option long_opts[] = { { "all", 0, NULL, 'a' }, { "off", 0, NULL, 'f' }, { "verbose", 0, NULL, 'v' }, { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "project", 0, NULL, 'P' }, { "print-state", 0, NULL, 'p' }, { "xfs-command", 1, NULL, 'x' }, { "format", 1, NULL, 'F' }, { "version", 0, NULL, 'V' }, { "help", 0, NULL, 'h' }, { NULL, 0, NULL, 0 } }; while ((c = getopt_long(argcnt, argstr, "afvugpPx:VF:h", long_opts, NULL)) != -1) { switch (c) { case 'a': flags |= FL_ALL; break; case 'f': flags |= FL_OFF; break; case 'g': flags |= FL_GROUP; break; case 'u': flags |= FL_USER; break; case 'P': flags |= FL_PROJECT; break; case 'v': flags |= FL_VERBOSE; break; case 'x': xarg = optarg; break; case 'p': flags |= FL_STAT; break; case 'F': if ((fmt = name2fmt(optarg)) == QF_ERROR) exit(1); break; case 'V': version(); exit(0); case 'h': default: usage(); } } if ((flags & FL_ALL && optind != argcnt) || (!(flags & FL_ALL) && optind == argcnt)) { fputs(_("Bad number of arguments.\n"), stderr); usage(); } if (fmt == QF_RPC) { fputs(_("Cannot turn on/off quotas via RPC.\n"), stderr); exit(1); } if (!(flags & (FL_USER | FL_GROUP | FL_PROJECT))) flags |= FL_USER | FL_GROUP | FL_PROJECT; if (!(flags & FL_ALL)) { mntpoints = argstr + optind; mntcnt = argcnt - optind; } } int pinfo(char *fmt, ...) { va_list arg; int ret; if (!(flags & FL_VERBOSE)) return 0; va_start(arg, fmt); ret = vprintf(fmt, arg); va_end(arg); return ret; } /* * Enable/disable rsquash on given filesystem */ static int quotarsquashonoff(const char *quotadev, int type, int flags) { #if defined(MNTOPT_RSQUASH) int ret; if (kernel_iface == IFACE_GENERIC) { int qcmd = QCMD(Q_SETINFO, type); struct if_dqinfo info; info.dqi_flags = V1_DQF_RSQUASH; info.dqi_valid = IIF_FLAGS; ret = quotactl(qcmd, quotadev, 0, (void *)&info); } else { int mode = (flags & STATEFLAG_OFF) ? 0 : 1; int qcmd = QCMD(Q_V1_RSQUASH, type); ret = quotactl(qcmd, quotadev, 0, (void *)&mode); } if (ret < 0) { errstr(_("set root_squash on %s: %s\n"), quotadev, strerror(errno)); return 1; } if (flags & STATEFLAG_OFF) pinfo(_("%s: %s root_squash turned off\n"), quotadev, type2name(type)); else if (flags & STATEFLAG_ON) pinfo(_("%s: %s root_squash turned on\n"), quotadev, type2name(type)); #endif return 0; } /* * Enable/disable VFS quota on given filesystem */ static int quotaonoff(const char *quotadev, const char *quotadir, char *quotafile, int type, int fmt, int flags) { int qcmd, kqf; if (flags & STATEFLAG_OFF) { if (kernel_iface == IFACE_GENERIC) qcmd = QCMD(Q_QUOTAOFF, type); else qcmd = QCMD(Q_6_5_QUOTAOFF, type); if (quotactl(qcmd, quotadev, 0, NULL) < 0) { errstr(_("quotactl on %s [%s]: %s\n"), quotadev, quotadir, strerror(errno)); return 1; } pinfo(_("%s [%s]: %s quotas turned off\n"), quotadev, quotadir, _(type2name(type))); return 0; } if (kernel_iface == IFACE_GENERIC) { qcmd = QCMD(Q_QUOTAON, type); kqf = util2kernfmt(fmt); } else { qcmd = QCMD(Q_6_5_QUOTAON, type); kqf = 0; } if (quotactl(qcmd, quotadev, kqf, (void *)quotafile) < 0) { if (errno == ENOENT) errstr(_("cannot find %s on %s [%s]\n"), quotafile, quotadev, quotadir); else errstr(_("using %s on %s [%s]: %s\n"), quotafile, quotadev, quotadir, strerror(errno)); if (errno == EINVAL) errstr(_("Maybe create new quota files with quotacheck(8)?\n")); else if (errno == ESRCH) errstr(_("Quota format not supported in kernel.\n")); return 1; } pinfo(_("%s [%s]: %s quotas turned on\n"), quotadev, quotadir, _(type2name(type))); return 0; } /* * Enable/disable quota/rootsquash on given filesystem (version 1) */ static int v1_newstate(struct mount_entry *mnt, int type, char *file, int flags, int fmt) { int errs = 0; if ((flags & STATEFLAG_OFF) && str_hasmntopt(mnt->me_opts, MNTOPT_RSQUASH)) errs += quotarsquashonoff(mnt->me_devname, type, flags); errs += quotaonoff(mnt->me_devname, mnt->me_dir, file, type, QF_VFSOLD, flags); if ((flags & STATEFLAG_ON) && str_hasmntopt(mnt->me_opts, MNTOPT_RSQUASH)) errs += quotarsquashonoff(mnt->me_devname, type, flags); return errs; } /* * Enable/disable quota on given filesystem (generic VFS quota) */ static int v2_newstate(struct mount_entry *mnt, int type, char *file, int flags, int fmt) { return quotaonoff(mnt->me_devname, mnt->me_dir, file, type, fmt, flags); } /* * For both VFS quota formats, need to pass in the quota file; * for XFS quota manager, pass on the -x command line option. */ static int newstate(struct mount_entry *mnt, int type, char *extra) { static int warned; int sflags, ret = 0; sflags = flags & FL_OFF ? STATEFLAG_OFF : STATEFLAG_ON; if (flags & FL_ALL) sflags |= STATEFLAG_ALL; if (!strcmp(mnt->me_type, MNTTYPE_GFS2)) { errstr(_("Cannot change state of GFS2 quota.\n")); return 1; } else if (!strcmp(mnt->me_type, MNTTYPE_XFS) || !strcmp(mnt->me_type, MNTTYPE_EXFS)) { /* XFS filesystem has special handling... */ if (!kern_qfmt_supp(QF_XFS)) { errstr(_("Cannot change state of XFS quota. It's not compiled in kernel.\n")); return 1; } ret = xfs_newstate(mnt, type, extra, sflags); } else if (mnt->me_qfmt[type] == QF_META) { /* Must be non-empty because empty path is always invalid. */ ret = v2_newstate(mnt, type, ".", sflags, QF_VFSV0); } else { int usefmt; if (!me_hasquota(mnt, type)) return 0; if (!warned && !strcmp(mnt->me_type, MNTTYPE_EXT4) && ext4_supports_quota_feature()) { warned = 1; errstr(_("Your kernel probably supports ext4 quota " "feature but you are using external quota " "files. Please switch your filesystem to use " "ext4 quota feature as external quota files " "on ext4 are deprecated. You can enable the " "feature by unmounting the file system and " "running 'tune2fs -O quota <device>'.\n")); } if (fmt == -1) { if (get_qf_name(mnt, type, QF_VFSV0, NF_FORMAT, &extra) >= 0) usefmt = QF_VFSV0; else if (get_qf_name(mnt, type, QF_VFSV1, NF_FORMAT, &extra) >= 0) usefmt = QF_VFSV1; else if (get_qf_name(mnt, type, QF_VFSOLD, NF_FORMAT, &extra) >= 0) usefmt = QF_VFSOLD; else { errstr(_("Cannot find quota file on %s [%s] to turn quotas on/off.\n"), mnt->me_dir, mnt->me_devname); return 1; } } else { if (get_qf_name(mnt, type, fmt, NF_FORMAT, &extra) < 0) { errstr(_("Quota file on %s [%s] does not exist or has wrong format.\n"), mnt->me_dir, mnt->me_devname); return 1; } usefmt = fmt; } if (is_tree_qfmt(usefmt)) ret = v2_newstate(mnt, type, extra, sflags, usefmt); else ret = v1_newstate(mnt, type, extra, sflags, QF_VFSOLD); free(extra); } return ret; } /* Print state of quota (on/off) */ static int print_state(struct mount_entry *mnt, int type) { int on = 0; char *state; if (kern_qfmt_supp(QF_XFS)) { on = kern_quota_state_xfs(mnt->me_devname, type); if (!strcmp(mnt->me_type, MNTTYPE_XFS) || !strcmp(mnt->me_type, MNTTYPE_GFS2) || on >= 0 || !strcmp(mnt->me_type, MNTTYPE_EXFS)) { if (on < 0) on = 0; if (!(flags & FL_VERBOSE)) goto print_state; if (on == 0) state = _("off"); else if (on == 1) state = _("on (accounting)"); else state = _("on (enforced)"); goto print; } } if (kernel_iface == IFACE_GENERIC) on = kern_quota_on(mnt, type, -1) != -1; else if (kern_qfmt_supp(QF_VFSV0)) on = kern_quota_on(mnt, type, QF_VFSV0) != -1; else if (kern_qfmt_supp(QF_VFSOLD)) on = kern_quota_on(mnt, type, QF_VFSOLD) != -1; print_state: state = on ? _("on") : _("off"); print: printf(_("%s quota on %s (%s) is %s\n"), _(type2name(type)), mnt->me_dir, mnt->me_devname, state); return on > 0; } int main(int argc, char **argv) { struct mount_entry *mnt; int errs = 0; gettexton(); progname = basename(argv[0]); if (strcmp(progname, "quotaoff") == 0) flags |= FL_OFF; else if (strcmp(progname, "quotaon") != 0) die(1, _("Name must be quotaon or quotaoff not %s\n"), progname); parse_options(argc, argv); init_kernel_interface(); if (fmt != -1 && !kern_qfmt_supp(fmt)) die(1, _("Required format %s not supported by kernel.\n"), fmt2name(fmt)); else if (!kern_qfmt_supp(-1)) errstr(_("Warning: No quota format detected in the kernel.\n")); if (init_mounts_scan(mntcnt, mntpoints, MS_XFS_DISABLED | MS_LOCALONLY) < 0) return 1; while ((mnt = get_next_mount())) { if (nfs_fstype(mnt->me_type)) { if (!(flags & FL_ALL)) errstr(_("%s: Quota cannot be turned on on NFS filesystem\n"), mnt->me_devname); continue; } if (!(flags & FL_STAT)) { if (flags & FL_GROUP) errs += newstate(mnt, GRPQUOTA, xarg); if (flags & FL_USER) errs += newstate(mnt, USRQUOTA, xarg); if (flags & FL_PROJECT) errs += newstate(mnt, PRJQUOTA, xarg); } else { if (flags & FL_GROUP) errs += print_state(mnt, GRPQUOTA); if (flags & FL_USER) errs += print_state(mnt, USRQUOTA); if (flags & FL_PROJECT) errs += print_state(mnt, PRJQUOTA); } } end_mounts_scan(); return errs; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaon.h��������������������������������������������������������������������������������0000664�0000000�0000000�00000001023�14463210551�0014433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Common types, macros, and routines for enabling/disabling * quota for each of the various Linux quota formats. */ #include "pot.h" #include "quota.h" #include "quotasys.h" #include "bylabel.h" #include "common.h" #include "quotaio.h" #define STATEFLAG_ON 0x01 #define STATEFLAG_OFF 0x02 #define STATEFLAG_ALL 0x04 typedef int (newstate_t) (struct mount_entry * mnt, int type, char *file, int flags); extern int xfs_newstate(struct mount_entry *mnt, int type, char *file, int flags); extern int pinfo(char *fmt, ...); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaon_xfs.c����������������������������������������������������������������������������0000664�0000000�0000000�00000015353�14463210551�0015321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * State changes for the XFS Quota Manager. * Copyright (c) 2001 Silicon Graphics, Inc. */ #include "config.h" #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include "quotaon.h" #include "dqblk_xfs.h" #define QOFF 1 #define ACCT 2 #define ENFD 3 /* * Ensure we don't attempt to go into a dodgey state. */ static int xfs_state_check(int qcmd, int type, int flags, const char *dev, int roothack, int xopts) { struct xfs_mem_dqinfo info; int state; char *acctstr = ""; /* we never want to operate via -a in XFS quota */ if (flags & STATEFLAG_ALL) return 0; /* noop */ if (quotactl(QCMD(Q_XFS_GETQSTAT, type), dev, 0, (void *)&info) < 0) { errstr(_("quotactl() on %s: %s\n"), dev, strerror(errno)); return -1; } /* establish current state before any transition */ state = QOFF; if (type == USRQUOTA) { if (info.qs_flags & XFS_QUOTA_UDQ_ACCT) state = ACCT; if (info.qs_flags & XFS_QUOTA_UDQ_ENFD) state = ENFD; } else if (type == GRPQUOTA) { if (info.qs_flags & XFS_QUOTA_GDQ_ACCT) state = ACCT; if (info.qs_flags & XFS_QUOTA_GDQ_ENFD) state = ENFD; } else if (type == PRJQUOTA) { if (info.qs_flags & XFS_QUOTA_PDQ_ACCT) state = ACCT; if (info.qs_flags & XFS_QUOTA_PDQ_ENFD) state = ENFD; } switch (state) { case QOFF: switch (qcmd) { case Q_XFS_QUOTARM: return 1; case Q_XFS_QUOTAON: if (roothack) { pinfo(_("Enabling %s quota on root filesystem" " (reboot to take effect)\n"), _(type2name(type))); return 1; } errstr(_("Enable XFS %s quota accounting during mount\n"), _(type2name(type))); return -1; case Q_XFS_QUOTAOFF: return 0; /* noop */ } break; case ACCT: switch (qcmd) { case Q_XFS_QUOTARM: errstr(_("Cannot delete %s quota on %s - " "switch quota accounting off first\n"), _(type2name(type)), dev); return -1; case Q_XFS_QUOTAON: if (roothack) { pinfo(_("Enabling %s quota on root filesystem" " (reboot to take effect)\n"), _(type2name(type))); return 1; } if (xopts & XFS_QUOTA_UDQ_ENFD || xopts & XFS_QUOTA_GDQ_ENFD || xopts & XFS_QUOTA_PDQ_ENFD) { pinfo(_("Enabling %s quota enforcement on %s\n"), _(type2name(type)), dev); return 1; } errstr(_("Already accounting %s quota on %s\n"), _(type2name(type)), dev); return -1; case Q_XFS_QUOTAOFF: if (xopts & XFS_QUOTA_UDQ_ACCT || xopts & XFS_QUOTA_GDQ_ACCT || xopts & XFS_QUOTA_PDQ_ACCT) { pinfo(_("Disabling %s quota accounting on %s\n"), _(type2name(type)), dev); return 1; } errstr(_("Quota enforcement already disabled for %s on %s\n"), _(type2name(type)), dev); return -1; } break; case ENFD: switch (qcmd) { case Q_XFS_QUOTARM: errstr(_("Cannot delete %s quota on %s - " "switch quota enforcement and accounting off first\n"), _(type2name(type)), dev); return -1; case Q_XFS_QUOTAON: errstr(_("Enforcing %s quota already on %s\n"), _(type2name(type)), dev); return -1; case Q_XFS_QUOTAOFF: if (xopts == XFS_QUOTA_UDQ_ACCT || xopts == XFS_QUOTA_GDQ_ACCT || xopts == XFS_QUOTA_PDQ_ACCT) { errstr(_("Cannot switch off %s quota " "accounting on %s when enforcement is on\n"), _(type2name(type)), dev); return -1; } if (xopts & XFS_QUOTA_UDQ_ACCT || xopts & XFS_QUOTA_GDQ_ACCT || xopts & XFS_QUOTA_PDQ_ACCT) acctstr = _("and accounting "); pinfo(_("Disabling %s quota enforcement %son %s\n"), _(type2name(type)), acctstr, dev); return 1; } break; } errstr(_("Unexpected XFS quota state sought on %s\n"), dev); return -1; } static int xfs_onoff(const char *dev, int type, int flags, int roothack, int xopts) { int qoff, qcmd, check; qoff = (flags & STATEFLAG_OFF); qcmd = qoff ? Q_XFS_QUOTAOFF : Q_XFS_QUOTAON; check = xfs_state_check(qcmd, type, flags, dev, roothack, xopts); if (check != 1) return (check < 0); if (quotactl(QCMD(qcmd, type), dev, 0, (void *)&xopts) < 0) { errstr(_("quotactl on %s: %s\n"), dev, strerror(errno)); return 1; } if (qoff) pinfo(_("%s: %s quotas turned off\n"), dev, _(type2name(type))); else pinfo(_("%s: %s quotas turned on\n"), dev, _(type2name(type))); return 0; } static int xfs_delete(const char *dev, int type, int flags, int roothack, int xopts) { int qcmd, check; qcmd = Q_XFS_QUOTARM; check = xfs_state_check(qcmd, type, flags, dev, roothack, xopts); if (check != 1) return (check < 0); if (quotactl(QCMD(qcmd, type), dev, 0, (void *)&xopts) < 0) { errstr(_("Failed to delete quota: %s\n"), strerror(errno)); return 1; } pinfo(_("%s: deleted %s quota blocks\n"), dev, _(type2name(type))); return 0; } /* * Change state for given filesystem - on/off, acct/enfd, & delete. * Must consider existing state and also whether or not this is the * root filesystem. * We are passed in the new requested state through "type" & "xarg". */ int xfs_newstate(struct mount_entry *mnt, int type, char *xarg, int flags) { int err = 1; int xopts = 0; int roothack = 0; #ifdef XFS_ROOTHACK /* * Old XFS filesystems (up to XFS 1.2 / Linux 2.5.47) had a * hack to allow enabling quota on the root filesystem without * having to specify it at mount time. */ if ((strcmp(mnt->me_dir, "/") == 0)) { struct xfs_mem_dqinfo info; u_int16_t sbflags = 0; if (!quotactl(QCMD(Q_XFS_GETQSTAT, type), mnt->me_devname, 0, (void *)&info)) sbflags = (info.qs_flags & 0xff00) >> 8; if ((type == USRQUOTA && (sbflags & XFS_QUOTA_UDQ_ACCT)) && (type == GRPQUOTA && (sbflags & XFS_QUOTA_GDQ_ACCT))) roothack = 1; } #endif /* XFS_ROOTHACK */ if (xarg == NULL || strcmp(xarg, "enforce") == 0) { /* only enfd on/off */ if (type == USRQUOTA) xopts |= XFS_QUOTA_UDQ_ENFD; else if (type == GRPQUOTA) xopts |= XFS_QUOTA_GDQ_ENFD; else if (type == PRJQUOTA) xopts |= XFS_QUOTA_PDQ_ENFD; err = xfs_onoff(mnt->me_devname, type, flags, roothack, xopts); } else if (strcmp(xarg, "account") == 0) { if (type == USRQUOTA) xopts |= XFS_QUOTA_UDQ_ACCT; else if (type == GRPQUOTA) xopts |= XFS_QUOTA_GDQ_ACCT; else if (type == PRJQUOTA) xopts |= XFS_QUOTA_PDQ_ACCT; err = xfs_onoff(mnt->me_devname, type, flags, roothack, xopts); } else if (strcmp(xarg, "delete") == 0) { if (type == USRQUOTA) xopts |= XFS_USER_QUOTA; else if (type == GRPQUOTA) xopts |= XFS_GROUP_QUOTA; else if (type == PRJQUOTA) xopts |= XFS_PROJ_QUOTA; err = xfs_delete(mnt->me_devname, type, flags, roothack, xopts); } else die(1, _("Invalid argument \"%s\"\n"), xarg); return err; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotaops.c�������������������������������������������������������������������������������0000664�0000000�0000000�00000035772�14463210551�0014635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Helper functions to handle lists of quota structures */ #include "config.h" #if defined(RPC) #include <rpc/rpc.h> #endif #include <sys/types.h> #include <sys/stat.h> #include <sys/file.h> #include <sys/wait.h> #include <errno.h> #include <pwd.h> #include <grp.h> #include <stdio.h> #include <string.h> #include <signal.h> #include <paths.h> #include <unistd.h> #include <time.h> #include <ctype.h> #include <limits.h> #include <stdlib.h> #if defined(RPC) #include "rquota.h" #endif #include "mntopt.h" #include "quotaops.h" #include "pot.h" #include "bylabel.h" #include "common.h" #include "quotasys.h" #include "quotaio.h" /* * Set grace time if needed */ void update_grace_times(struct dquot *q) { time_t now; time(&now); if (q->dq_dqb.dqb_bsoftlimit && toqb(q->dq_dqb.dqb_curspace) > q->dq_dqb.dqb_bsoftlimit) { if (!q->dq_dqb.dqb_btime) q->dq_dqb.dqb_btime = now + q->dq_h->qh_info.dqi_bgrace; } else q->dq_dqb.dqb_btime = 0; if (q->dq_dqb.dqb_isoftlimit && q->dq_dqb.dqb_curinodes > q->dq_dqb.dqb_isoftlimit) { if (!q->dq_dqb.dqb_itime) q->dq_dqb.dqb_itime = now + q->dq_h->qh_info.dqi_igrace; } else q->dq_dqb.dqb_itime = 0; } /* * Collect the requested quota information. */ struct dquot *getprivs(qid_t id, struct quota_handle **handles, int ignore_noquota) { struct dquot *q, *qtail = NULL, *qhead = NULL; int i; char name[MAXNAMELEN]; #if defined(BSD_BEHAVIOUR) int j, ngroups; uid_t euid; gid_t gidset[NGROUPS_MAX], *gidsetp; #endif for (i = 0; handles[i]; i++) { #if defined(BSD_BEHAVIOUR) switch (handles[i]->qh_type) { case USRQUOTA: euid = geteuid(); if (euid != id && euid != 0) { uid2user(id, name); errstr(_("%s (uid %d): Permission denied\n"), name, id); goto out_err; } break; case GRPQUOTA: if (geteuid() == 0) break; ngroups = sysconf(_SC_NGROUPS_MAX); if (ngroups > NGROUPS_MAX) { gidsetp = malloc(ngroups * sizeof(gid_t)); if (!gidsetp) { gid2group(id, name); errstr(_("%s (gid %d): gid set allocation (%d): %s\n"), name, id, ngroups, strerror(errno)); goto out_err; } } else gidsetp = &gidset[0]; ngroups = getgroups(ngroups, gidsetp); if (ngroups < 0) { if (gidsetp != gidset) free(gidsetp); gid2group(id, name); errstr(_("%s (gid %d): error while trying getgroups(): %s\n"), name, id, strerror(errno)); goto out_err; } for (j = 0; j < ngroups; j++) if (id == gidsetp[j]) break; if (gidsetp != gidset) free(gidsetp); if (j >= ngroups) { gid2group(id, name); errstr(_("%s (gid %d): Permission denied\n"), name, id); goto out_err; } break; default: break; } #endif if (!(q = handles[i]->qh_ops->read_dquot(handles[i], id))) { char *estr; /* If rpc.rquotad is not running, filesystem might be just without quotas... */ if (ignore_noquota && (errno == ENOENT || errno == ECONNREFUSED)) continue; if (errno == ECONNREFUSED) { estr = _("Cannot connect to RPC quota service"); } else if (errno == ENOENT) { estr = _("Quota not enabled"); } else { estr = strerror(errno); } id2name(id, handles[i]->qh_type, name); errstr(_("error while getting quota from %s for %s (id %u): %s\n"), handles[i]->qh_quotadev, name, id, estr); #if defined(BSD_BEHAVIOUR) out_err: #endif freeprivs(qhead); return NULL; } if (qhead == NULL) qhead = q; else qtail->dq_next = q; qtail = q; q->dq_next = NULL; /* This should be already set, but just for sure... */ } return qhead; } /* * Store the requested quota information. */ int putprivs(struct dquot *qlist, int flags) { struct dquot *q; int ret = 0; for (q = qlist; q; q = q->dq_next) { if (q->dq_h->qh_ops->commit_dquot(q, flags) == -1) { errstr(_("Cannot write quota for %u on %s: %s\n"), q->dq_id, q->dq_h->qh_quotadev, strerror(errno)); ret = -1; continue; } } return ret; } /* * Take a list of priviledges and get it edited. */ #define MAX_ED_PARS 128 int editprivs(char *tmpfile) { sigset_t omask, nmask; pid_t pid; int stat; sigemptyset(&nmask); sigaddset(&nmask, SIGINT); sigaddset(&nmask, SIGQUIT); sigaddset(&nmask, SIGHUP); sigprocmask(SIG_SETMASK, &nmask, &omask); if ((pid = fork()) < 0) { errstr("Cannot fork(): %s\n", strerror(errno)); return -1; } if (pid == 0) { char *ed, *actp, *nextp; char *edpars[MAX_ED_PARS]; int i; sigprocmask(SIG_SETMASK, &omask, NULL); if (setgid(getgid())) die(1, _("%s failed: %s\n"), "setgid", strerror(errno)); if (setuid(getuid())) die(1, _("%s failed: %s\n"), "setuid", strerror(errno)); if (!(ed = getenv("VISUAL"))) if (!(ed = getenv("EDITOR"))) ed = _PATH_VI; i = 0; ed = actp = sstrdup(ed); while (actp) { nextp = strchr(actp, ' '); if (nextp) { *nextp = 0; nextp++; } edpars[i++] = actp; if (i == MAX_ED_PARS-2) { errstr(_("Too many parameters to editor.\n")); break; } actp = nextp; } edpars[i++] = tmpfile; edpars[i] = NULL; execvp(edpars[0], edpars); die(1, _("Cannot exec %s\n"), ed); } waitpid(pid, &stat, 0); sigprocmask(SIG_SETMASK, &omask, NULL); return 0; } /* * Duplicate a file descriptor, resetting the file offset. * If it's a write descriptor, also truncate the file. */ static FILE *dup_file(int fd, int is_write) { FILE *fp; if (is_write && ftruncate(fd, 0)) die(1, _("Cannot truncate a file: %s\n"), strerror(errno)); if (lseek(fd, 0, SEEK_SET)) die(1, _("Cannot reset a file offset: %s\n"), strerror(errno)); if ((fd = dup(fd)) < 0) die(1, _("Cannot duplicate a file descriptor: %s\n"), strerror(errno)); if (!(fp = fdopen(fd, is_write ? "w" : "r"))) die(1, is_write ? _("Cannot open a stream to write to: %s\n") : _("Cannot open a stream to read from: %s\n"), strerror(errno)); return fp; } /* * Convert a dquot list to an ASCII file. */ int writeprivs(struct dquot *qlist, int outfd, char *name, int quotatype) { struct dquot *q; FILE *fd; fd = dup_file(outfd, 1); fprintf(fd, _("Disk quotas for %s %s (%cid %d):\n"), _(type2name(quotatype)), name, *type2name(quotatype), qlist->dq_id); fprintf(fd, _(" Filesystem blocks soft hard inodes soft hard\n")); for (q = qlist; q; q = q->dq_next) { fprintf(fd, " %-24s %10llu %10llu %10llu %10llu %8llu %8llu\n", q->dq_h->qh_quotadev, (long long)toqb(q->dq_dqb.dqb_curspace), (long long)q->dq_dqb.dqb_bsoftlimit, (long long)q->dq_dqb.dqb_bhardlimit, (long long)q->dq_dqb.dqb_curinodes, (long long)q->dq_dqb.dqb_isoftlimit, (long long)q->dq_dqb.dqb_ihardlimit); } fclose(fd); return 0; } /* Merge changes on one dev to proper structure in the list */ static void merge_limits_to_list(struct dquot *qlist, char *dev, u_int64_t blocks, u_int64_t bsoft, u_int64_t bhard, u_int64_t inodes, u_int64_t isoft, u_int64_t ihard) { struct dquot *q; for (q = qlist; q; q = q->dq_next) { if (!devcmp_handle(dev, q->dq_h)) continue; q->dq_dqb.dqb_bsoftlimit = bsoft; q->dq_dqb.dqb_bhardlimit = bhard; q->dq_dqb.dqb_isoftlimit = isoft; q->dq_dqb.dqb_ihardlimit = ihard; q->dq_flags |= DQ_FOUND; update_grace_times(q); if (blocks != toqb(q->dq_dqb.dqb_curspace)) errstr(_("WARNING - %s: cannot change current block allocation\n"), q->dq_h->qh_quotadev); if (inodes != q->dq_dqb.dqb_curinodes) errstr(_("WARNING - %s: cannot change current inode allocation\n"), q->dq_h->qh_quotadev); } } /* * Merge changes to an ASCII file into a dquot list. */ int readprivs(struct dquot *qlist, int infd) { FILE *fd; int cnt; qsize_t blocks, bsoft, bhard, inodes, isoft, ihard; struct dquot *q; char fsp[BUFSIZ], line[BUFSIZ]; char blocksstring[BUFSIZ], bsoftstring[BUFSIZ], bhardstring[BUFSIZ]; char inodesstring[BUFSIZ], isoftstring[BUFSIZ], ihardstring[BUFSIZ]; const char *error; fd = dup_file(infd, 0); /* * Discard title lines, then read lines to process. */ if (!fgets(line, sizeof(line), fd) || !fgets(line, sizeof(line), fd)) { errstr(_("Bad format: two title lines assumed\n")); fclose(fd); return -1; } while (fgets(line, sizeof(line), fd)) { cnt = sscanf(line, "%s %s %s %s %s %s %s", fsp, blocksstring, bsoftstring, bhardstring, inodesstring, isoftstring, ihardstring); if (cnt != 7) { errstr(_("Bad format:\n%s\n"), line); fclose(fd); return -1; } error = str2space(blocksstring, &blocks); if (error) { errstr(_("Bad block usage: %s: %s\n"), blocksstring, error); fclose(fd); return -1; } error = str2space(bsoftstring, &bsoft); if (error) { errstr(_("Bad block soft limit: %s: %s\n"), bsoftstring, error); fclose(fd); return -1; } error = str2space(bhardstring, &bhard); if (error) { errstr(_("Bad block hard limit: %s: %s\n"), bhardstring, error); fclose(fd); return -1; } error = str2number(inodesstring, &inodes); if (error) { errstr(_("Bad inode usage: %s: %s\n"), inodesstring, error); fclose(fd); return -1; } error = str2number(isoftstring, &isoft); if (error) { errstr(_("Bad inode soft limit: %s: %s\n"), isoftstring, error); fclose(fd); return -1; } error = str2number(ihardstring, &ihard); if (error) { errstr(_("Bad inode hard limit: %s: %s\n"), ihardstring, error); fclose(fd); return -1; } merge_limits_to_list(qlist, fsp, blocks, bsoft, bhard, inodes, isoft, ihard); } fclose(fd); /* * Disable quotas for any filesystems that have not been found. */ for (q = qlist; q; q = q->dq_next) { if (q->dq_flags & DQ_FOUND) { q->dq_flags &= ~DQ_FOUND; continue; } q->dq_dqb.dqb_bsoftlimit = 0; q->dq_dqb.dqb_bhardlimit = 0; q->dq_dqb.dqb_isoftlimit = 0; q->dq_dqb.dqb_ihardlimit = 0; } return 0; } /* Merge changes on one dev to proper structure in the list */ static void merge_times_to_list(struct dquot *qlist, char *dev, time_t btime, time_t itime) { struct dquot *q; for (q = qlist; q; q = q->dq_next) { if (!devcmp_handle(dev, q->dq_h)) continue; q->dq_dqb.dqb_btime = btime; q->dq_dqb.dqb_itime = itime; q->dq_flags |= DQ_FOUND; } } /* * Write grace times of user to file */ int writeindividualtimes(struct dquot *qlist, int outfd, char *name, int quotatype) { struct dquot *q; FILE *fd; time_t now; char btimestr[MAXTIMELEN], itimestr[MAXTIMELEN]; fd = dup_file(outfd, 1); fprintf(fd, _("Times to enforce softlimit for %s %s (%cid %d):\n"), _(type2name(quotatype)), name, *type2name(quotatype), qlist->dq_id); fprintf(fd, _("Time units may be: days, hours, minutes, or seconds\n")); fprintf(fd, _(" Filesystem block grace inode grace\n")); time(&now); for (q = qlist; q; q = q->dq_next) { if (!q->dq_dqb.dqb_btime) strcpy(btimestr, _("unset")); else if (q->dq_dqb.dqb_btime <= now) strcpy(btimestr, _("0seconds")); else sprintf(btimestr, _("%useconds"), (unsigned)(q->dq_dqb.dqb_btime - now)); if (!q->dq_dqb.dqb_itime) strcpy(itimestr, _("unset")); else if (q->dq_dqb.dqb_itime <= now) strcpy(itimestr, _("0seconds")); else sprintf(itimestr, _("%useconds"), (unsigned)(q->dq_dqb.dqb_itime - now)); fprintf(fd, " %-24s %22s %22s\n", q->dq_h->qh_quotadev, btimestr, itimestr); } fclose(fd); return 0; } /* * Read list of grace times for a user and convert it */ int readindividualtimes(struct dquot *qlist, int infd) { FILE *fd; int cnt, btime, itime; char line[BUFSIZ], fsp[BUFSIZ], btimestr[BUFSIZ], itimestr[BUFSIZ]; char iunits[BUFSIZ], bunits[BUFSIZ]; time_t now, bseconds, iseconds; fd = dup_file(infd, 0); /* * Discard title lines, then read lines to process. */ if (!fgets(line, sizeof(line), fd) || !fgets(line, sizeof(line), fd) || !fgets(line, sizeof(line), fd)) { errstr(_("Bad format: three title lines assumed\n")); fclose(fd); return -1; } time(&now); while (fgets(line, sizeof(line), fd)) { cnt = sscanf(line, "%s %s %s", fsp, btimestr, itimestr); if (cnt != 3) { format_err: errstr(_("bad format:\n%s\n"), line); fclose(fd); return -1; } if (!strcmp(btimestr, _("unset"))) bseconds = 0; else { if (sscanf(btimestr, "%d%s", &btime, bunits) != 2) goto format_err; if (str2timeunits(btime, bunits, &bseconds) < 0) { units_err: errstr(_("Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n")); fclose(fd); return -1; } bseconds += now; } if (!strcmp(itimestr, _("unset"))) iseconds = 0; else { if (sscanf(itimestr, "%d%s", &itime, iunits) != 2) goto format_err; if (str2timeunits(itime, iunits, &iseconds) < 0) goto units_err; iseconds += now; } merge_times_to_list(qlist, fsp, bseconds, iseconds); } fclose(fd); return 0; } /* * Convert a dquot list to an ASCII file of grace times. */ int writetimes(struct quota_handle **handles, int outfd) { FILE *fd; char itimebuf[MAXTIMELEN], btimebuf[MAXTIMELEN]; int i; if (!handles[0]) return 0; fd = dup_file(outfd, 1); fprintf(fd, _("Grace period before enforcing soft limits for %ss:\n"), _(type2name(handles[0]->qh_type))); fprintf(fd, _("Time units may be: days, hours, minutes, or seconds\n")); fprintf(fd, _(" Filesystem Block grace period Inode grace period\n")); for (i = 0; handles[i]; i++) { time2str(handles[i]->qh_info.dqi_bgrace, btimebuf, 0); time2str(handles[i]->qh_info.dqi_igrace, itimebuf, 0); fprintf(fd, " %-12s %22s %22s\n", handles[i]->qh_quotadev, btimebuf, itimebuf); } fclose(fd); return 0; } /* * Merge changes of grace times in an ASCII file into a dquot list. */ int readtimes(struct quota_handle **handles, int infd) { FILE *fd; int itime, btime, i, cnt; time_t iseconds, bseconds; char fsp[BUFSIZ], bunits[10], iunits[10], line[BUFSIZ]; if (!handles[0]) return 0; fd = dup_file(infd, 0); /* Set all grace times to default values */ for (i = 0; handles[i]; i++) { handles[i]->qh_info.dqi_bgrace = MAX_DQ_TIME; handles[i]->qh_info.dqi_igrace = MAX_IQ_TIME; mark_quotafile_info_dirty(handles[i]); } /* * Discard three title lines, then read lines to process. */ if (!fgets(line, sizeof(line), fd) || !fgets(line, sizeof(line), fd) || !fgets(line, sizeof(line), fd)) { errstr(_("Bad format: three title lines assumed\n")); fclose(fd); return -1; } while (fgets(line, sizeof(line), fd)) { cnt = sscanf(line, "%s %d %s %d %s", fsp, &btime, bunits, &itime, iunits); if (cnt != 5) { errstr(_("bad format:\n%s\n"), line); fclose(fd); return -1; } if (str2timeunits(btime, bunits, &bseconds) < 0 || str2timeunits(itime, iunits, &iseconds) < 0) { errstr(_("Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n")); fclose(fd); return -1; } for (i = 0; handles[i]; i++) { if (!devcmp_handle(fsp, handles[i])) continue; handles[i]->qh_info.dqi_bgrace = bseconds; handles[i]->qh_info.dqi_igrace = iseconds; mark_quotafile_info_dirty(handles[i]); break; } } fclose(fd); return 0; } /* * Free a list of dquot structures. */ void freeprivs(struct dquot *qlist) { struct dquot *q, *nextq; for (q = qlist; q; q = nextq) { nextq = q->dq_next; free(q); } } ������quota-4.09/quotaops.h�������������������������������������������������������������������������������0000664�0000000�0000000�00000001320�14463210551�0014620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef GUARD_QUOTAOPS_H #define GUARD_QUOTAOPS_H #include "quotaio.h" struct dquot *getprivs(qid_t id, struct quota_handle ** handles, int quiet); int putprivs(struct dquot * qlist, int flags); int editprivs(char *tmpfile); int writeprivs(struct dquot * qlist, int outfd, char *name, int quotatype); int readprivs(struct dquot * qlist, int infd); int writeindividualtimes(struct dquot * qlist, int outfd, char *name, int quotatype); int readindividualtimes(struct dquot * qlist, int infd); int writetimes(struct quota_handle ** handles, int outfd); int readtimes(struct quota_handle ** handles, int infd); void freeprivs(struct dquot * qlist); void update_grace_times(struct dquot *q); #endif /* GUARD_QUOTAOPS_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotastats.8�����������������������������������������������������������������������������0000664�0000000�0000000�00000001337�14463210551�0015105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" 2004, Max Vozeler <max@hinterhof.net> .\" Released under the Gnu GPL .TH QUOTASTATS 8 "April 2, 2004" "" "quota" .SH NAME .B quotastats \- Program to query quota statistics .SH SYNOPSIS .I /usr/sbin/quotastats .SH DESCRIPTION .B quotastats queries the kernel for quota statistics. It displays: .P .PD 0 .RS 4 .IP \[bu] Supported kernel quota version .IP \[bu] Number of dquot lookups .IP \[bu] Number of dquot drops .IP \[bu] Number of dquot reads .IP \[bu] Number of dquot writes .IP \[bu] Number of quotafile syncs .IP \[bu] Number of dquot cache hits .IP \[bu] Number of allocated dquots .IP \[bu] Number of free dquots .IP \[bu] Number of in use dquot entries (user/group) .RE .PD .SH OPTIONS None. .SH SEE ALSO .BR quota (1). �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotastats.c�����������������������������������������������������������������������������0000664�0000000�0000000�00000010005�14463210551�0015150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * QUOTA An implementation of the diskquota system for the LINUX operating * system. QUOTA is implemented using the BSD systemcall interface * as the means of communication with the user level. Should work for * all filesystems because of integration into the VFS layer of the * operating system. This is based on the Melbourne quota system wich * uses both user and group quota files. * * Program to query for the internal statistics. * * Author: Marco van Wieringen <mvw@planets.elm.net> * * 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 <sys/types.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <signal.h> #include "pot.h" #include "common.h" #include "quota.h" #include "quotasys.h" #include "quotaio.h" #include "quotaio_v1.h" #include "dqblk_v1.h" #include "quotaio_v2.h" #include "dqblk_v2.h" char *progname; static int get_proc_num(char *name) { int ret; char namebuf[PATH_MAX] = "/proc/sys/fs/quota/"; FILE *f; sstrncat(namebuf, name, PATH_MAX); if (!(f = fopen(namebuf, "r"))) { errstr(_("Cannot read stat file %s: %s\n"), namebuf, strerror(errno)); return -1; } fscanf(f, "%d", &ret); fclose(f); return ret; } static int get_stats(struct util_dqstats *dqstats) { struct v1_dqstats old_dqstats; struct v2_dqstats v0_dqstats; int ret = -1; struct stat st; signal(SIGSEGV, SIG_IGN); /* Ignore SIGSEGV due to bad quotactl() */ if (!stat("/proc/sys/fs/quota", &st)) { dqstats->version = 6*10000+5*100+1; dqstats->lookups = get_proc_num("lookups"); dqstats->drops = get_proc_num("drops"); dqstats->reads = get_proc_num("reads"); dqstats->writes = get_proc_num("writes"); dqstats->cache_hits = get_proc_num("cache_hits"); dqstats->allocated_dquots = get_proc_num("allocated_dquots"); dqstats->free_dquots = get_proc_num("free_dquots"); dqstats->syncs = get_proc_num("syncs"); } else if (quotactl(QCMD(Q_V1_GETSTATS, 0), NULL, 0, (caddr_t)&old_dqstats) >= 0) { /* Structures are currently the same */ memcpy(dqstats, &old_dqstats, sizeof(old_dqstats)); dqstats->version = 0; } else { /* Sadly these all are possible to get from kernel :( */ if (errno != EINVAL && errno != EPERM && errno != EFAULT) { errstr(_("Error while getting quota statistics from kernel: %s\n"), strerror(errno)); goto out; } if (quotactl(QCMD(Q_V2_GETSTATS, 0), NULL, 0, (caddr_t)&v0_dqstats) < 0) { errstr(_("Error while getting old quota statistics from kernel: %s\n"), strerror(errno)); goto out; } memcpy(dqstats, &v0_dqstats, sizeof(v0_dqstats)); } ret = 0; out: signal(SIGSEGV, SIG_DFL); return ret; } static inline int print_stats(struct util_dqstats *dqstats) { if (!dqstats->version) printf(_("Kernel quota version: old\n")); else printf(_("Kernel quota version: %u.%u.%u\n"), dqstats->version/10000, dqstats->version/100%100, dqstats->version%100); printf(_("Number of dquot lookups: %ld\n"), (long)dqstats->lookups); printf(_("Number of dquot drops: %ld\n"), (long)dqstats->drops); printf(_("Number of dquot reads: %ld\n"), (long)dqstats->reads); printf(_("Number of dquot writes: %ld\n"), (long)dqstats->writes); printf(_("Number of quotafile syncs: %ld\n"), (long)dqstats->syncs); printf(_("Number of dquot cache hits: %ld\n"), (long)dqstats->cache_hits); printf(_("Number of allocated dquots: %ld\n"), (long)dqstats->allocated_dquots); printf(_("Number of free dquots: %ld\n"), (long)dqstats->free_dquots); printf(_("Number of in use dquot entries (user/group): %ld\n"), (long)(dqstats->allocated_dquots - dqstats->free_dquots)); return 0; } int main(int argc, char **argv) { struct util_dqstats dqstats; gettexton(); progname = basename(argv[0]); if (!get_stats(&dqstats)) print_stats(&dqstats); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotasync.1������������������������������������������������������������������������������0000664�0000000�0000000�00000003202�14463210551�0014705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH QUOTASYNC 1 .SH NAME quotasync \- synchronize in-kernel file system usage and limits to disk format .SH SYNOPSIS .B quotasync [ .B -ugP ] .IR mount-point ... .br .B quotasync [ .B -ugP ] .B -a .br .B quotasync .B -h | .B -V .SH DESCRIPTION .B quotasync flushes file system usage and limits from kernel memory to quota files stored in the file system. By default only the user quotas are synchronized. .P This tool can be useful if you want to display accurate quotas by tools that parse quota files, like .BR repquota (8). .SH OPTIONS .TP .B -u, --user Synchronize user usage and limits. .TP .B -g, --group Synchronize group usage and limits. .TP .B -P, --project Synchronize project usage and limits. .TP .B -a, --all Synchronize usage and limits on all file systems. You have to specify this option or to specify desired file systems. .TP .B -V, --version Show program version information and exit. .TP .B -h, --help Show program usage and exit. .SH DIAGNOSTICS If requested synchronization fails, or invalid option is given, .B quotasync will terminate with non-zero exit code. Otherwise it will return zero. .SH FILES .PD 0 .TP 16 .B aquota.user " or " aquota.group Quota file at the file system root (version 2 quota, non-XFS/GFS2 file systems). .TP 16 .B quota.user " or " quota.group Quota file at the file system root (version 1 quota, non-XFS/GFS2 file systems). .TP 16 .B /etc/mtab List of mounted file systems maintained by user space. .TP 16 .B /proc/mounts List of mounted file systems maintained by kernel. .PD .SH SEE ALSO .BR quota (1), .BR quotactl (2), .BR mount (8), .BR quotacheck (8), .BR quotaon (8), .BR repquota (8), .BR warnquota (8). ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotasync.c������������������������������������������������������������������������������0000664�0000000�0000000�00000006353�14463210551�0015001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "config.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <errno.h> #include <getopt.h> #include "pot.h" #include "common.h" #include "quotasys.h" #include "quotaio.h" #define FL_USER 1 /* sync user quotas */ #define FL_GROUP 2 /* sync group quotas */ #define FL_ALL 4 /* sync quotas on all filesystems */ #define FL_PROJECT 8 /* sync group quotas */ static int flags, fmt = -1; static char **mnt; static int mntcnt; char *progname; static void usage(int status) { printf(_( "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ugP] mount-point...\n" " or: %1$s [-ugP] -a\n" " or: %1$s -h | -V\n" "\n" ), progname); printf(_( "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group quotas\n" "-P, --project synchronize project quotas\n" "-a, --all synchronize quotas for all mounted file systems\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" )); printf(_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT); exit(status); } static void parse_options(int argcnt, char **argstr) { int ret; struct option long_opts[] = { { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "project", 0, NULL, 'P' }, { "all", 0, NULL, 'a' }, { "version", 0, NULL, 'V' }, { "help", 0, NULL, 'h' }, { NULL, 0, NULL, 0 } }; while ((ret = getopt_long(argcnt, argstr, "ahugPV", long_opts, NULL)) != -1) { switch (ret) { case '?': usage(EXIT_FAILURE); case 'h': usage(EXIT_SUCCESS); case 'V': version(); exit(EXIT_SUCCESS); case 'u': flags |= FL_USER; break; case 'g': flags |= FL_GROUP; break; case 'P': flags |= FL_PROJECT; break; case 'a': flags |= FL_ALL; break; } } if ((flags & FL_ALL && optind != argcnt) || (!(flags & FL_ALL) && optind == argcnt)) { fputs(_("Bad number of arguments.\n"), stderr); usage(EXIT_FAILURE); } if (!(flags & FL_ALL)) { mnt = argstr + optind; mntcnt = argcnt - optind; } if (!(flags & (FL_USER | FL_GROUP))) flags |= FL_USER; } static int sync_one(int type, char *dev) { int qcmd = QCMD(Q_SYNC, type); return quotactl(qcmd, dev, 0, NULL); } static int syncquotas(int type) { struct quota_handle **handles, *h; int i, ret = 0; if (flags & FL_ALL) { if (sync_one(type, NULL) < 0) { errstr(_("%s quota sync failed: %s\n"), _(type2name(type)), strerror(errno)); ret = -1; } return ret; } handles = create_handle_list(mntcnt, mnt, type, fmt, IOI_READONLY, MS_LOCALONLY | MS_NO_AUTOFS); for (i = 0; handles[i]; i++) { h = handles[i]; if (sync_one(type, h->qh_quotadev)) { errstr(_("%s quota sync failed for %s: %s\n"), _(type2name(type)), h->qh_quotadev, strerror(errno)); ret = -1; } } dispose_handle_list(handles); return ret; } int main(int argc, char **argv) { int ret = EXIT_SUCCESS; gettexton(); progname = basename(argv[0]); parse_options(argc, argv); init_kernel_interface(); if (flags & FL_USER) if (syncquotas(USRQUOTA)) ret = EXIT_FAILURE; if (flags & FL_GROUP) if (syncquotas(GRPQUOTA)) ret = EXIT_FAILURE; if (flags & FL_PROJECT) if (syncquotas(PRJQUOTA)) ret = EXIT_FAILURE; return ret; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotasys.c�������������������������������������������������������������������������������0000664�0000000�0000000�00000115735�14463210551�0014650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Interactions of quota with system - filenames, fstab and so on... * * Jan Kara <jack@suse.cz> - sponsored by SuSE CR */ #include "config.h" #include <stdio.h> #include <errno.h> #include <string.h> #include <limits.h> #include <pwd.h> #include <grp.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include <fcntl.h> #include <signal.h> #include <paths.h> #include <ctype.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/vfs.h> #include <stdint.h> #include <sys/utsname.h> #include "pot.h" #include "bylabel.h" #include "common.h" #include "quotasys.h" #include "quotaio.h" #include "dqblk_v1.h" #include "dqblk_v2.h" #include "dqblk_xfs.h" #include "quotaio_v2.h" #define min(x,y) (((x) < (y)) ? (x) : (y)) #define QFMT_NAMES 5 #define QOFMT_NAMES 3 static char extensions[MAXQUOTAS + 2][20] = INITQFNAMES; static char *basenames[] = INITQFBASENAMES; static char *fmtnames[] = { "vfsold", "vfsv0", "vfsv1", "rpc", "xfs", }; static char *ofmtnames[] = { "default", "csv", "xml" }; /* * Check for various kinds of NFS filesystem */ int nfs_fstype(char *type) { return !strcmp(type, MNTTYPE_NFS) || !strcmp(type, MNTTYPE_NFS4) || !strcmp(type, MNTTYPE_MPFS); } /* * Check whether filesystem has hidden quota files which is handles * as metadata (and thus always tracks usage). */ int meta_qf_fstype(char *type) { return !strcmp(type, MNTTYPE_OCFS2); } /* * Convert type of quota to written representation */ char *type2name(int type) { return extensions[type]; } /* * Project quota handling */ #define PROJECT_FILE "/etc/projid" #define MAX_LINE_LEN 1024 static FILE *project_file; /* Rewind /etc/projid to the beginning */ void setprent(void) { if (project_file) fclose(project_file); project_file = fopen(PROJECT_FILE, "r"); } /* Close /etc/projid file */ void endprent(void) { if (project_file) { fclose(project_file); project_file = NULL; } } /* Get next entry in /etc/projid */ struct fs_project *getprent(void) { static struct fs_project p; static char linebuf[MAX_LINE_LEN]; char *idstart, *idend; if (!project_file) return NULL; while (fgets(linebuf, MAX_LINE_LEN, project_file)) { /* Line too long? */ if (linebuf[strlen(linebuf) - 1] != '\n') continue; /* Skip comments */ if (linebuf[0] == '#') continue; idstart = strchr(linebuf, ':'); /* Skip invalid lines... We follow what xfs_quota does */ if (!idstart) continue; *idstart = 0; idstart++; /* * Colon can separate name from something else - follow what * xfs_quota does */ idend = strchr(idstart, ':'); if (idend) *idend = 0; p.pr_name = linebuf; p.pr_id = strtoul(idstart, NULL, 10); return &p; } return NULL; } static struct fs_project *get_project_by_name(char *name) { struct fs_project *p; setprent(); while ((p = getprent())) { if (!strcmp(name, p->pr_name)) break; } endprent(); return p; } static struct fs_project *get_project_by_id(qid_t id) { struct fs_project *p; setprent(); while ((p = getprent())) { if (p->pr_id == id) break; } endprent(); return p; } /* * Convert name to uid */ uid_t user2uid(char *name, int flag, int *err) { struct passwd *entry; uid_t ret; char *errch; if (err) *err = 0; if (!flag) { ret = strtoul(name, &errch, 0); if (!*errch) /* Is name number - we got directly uid? */ return ret; } if (!(entry = getpwnam(name))) { if (!err) { errstr(_("user %s does not exist.\n"), name); exit(1); } else { *err = -1; return 0; } } return entry->pw_uid; } /* * Convert group name to gid */ gid_t group2gid(char *name, int flag, int *err) { struct group *entry; gid_t ret; char *errch; if (err) *err = 0; if (!flag) { ret = strtoul(name, &errch, 0); if (!*errch) /* Is name number - we got directly gid? */ return ret; } if (!(entry = getgrnam(name))) { if (!err) { errstr(_("group %s does not exist.\n"), name); exit(1); } else { *err = -1; return 0; } } return entry->gr_gid; } /* * Convert project name to project id */ qid_t project2pid(char *name, int flag, int *err) { qid_t ret; char *errch; struct fs_project *p; if (err) *err = 0; if (!flag) { ret = strtoul(name, &errch, 0); if (!*errch) /* Is name number - we got directly pid? */ return ret; } p = get_project_by_name(name); if (!p) { if (!err) { errstr(_("project %s does not exist.\n"), name); exit(1); } else { *err = -1; return 0; } } return p->pr_id; } /* * Convert name to id */ int name2id(char *name, int qtype, int flag, int *err) { if (qtype == USRQUOTA) return user2uid(name, flag, err); else if (qtype == GRPQUOTA) return group2gid(name, flag, err); else return project2pid(name, flag, err); } /* * Convert uid to name */ int uid2user(uid_t id, char *buf) { struct passwd *entry; if (!(entry = getpwuid(id))) { snprintf(buf, MAXNAMELEN, "#%u", (uint) id); return 1; } else sstrncpy(buf, entry->pw_name, MAXNAMELEN); return 0; } /* * Convert gid to name */ int gid2group(gid_t id, char *buf) { struct group *entry; if (!(entry = getgrgid(id))) { snprintf(buf, MAXNAMELEN, "#%u", (uint) id); return 1; } else sstrncpy(buf, entry->gr_name, MAXNAMELEN); return 0; } /* * Convert project id to name */ int pid2project(qid_t id, char *buf) { struct fs_project *p; if (!(p = get_project_by_id(id))) { snprintf(buf, MAXNAMELEN, "#%u", (uint) id); return 1; } else sstrncpy(buf, p->pr_name, MAXNAMELEN); return 0; } /* * Convert id to user/groupname */ int id2name(int id, int qtype, char *buf) { if (qtype == USRQUOTA) return uid2user(id, buf); else if (qtype == GRPQUOTA) return gid2group(id, buf); else return pid2project(id, buf); } /* * Parse /etc/nsswitch.conf and return type of default passwd handling */ int passwd_handling(void) { FILE *f; char buf[1024], *colpos, *spcpos; int ret = PASSWD_FILES; if (!(f = fopen("/etc/nsswitch.conf", "r"))) return PASSWD_FILES; /* Can't open nsswitch.conf - fallback on compatible mode */ while (fgets(buf, sizeof(buf), f)) { if (strncmp(buf, "passwd:", 7)) /* Not passwd entry? */ continue; for (colpos = buf+7; isspace(*colpos); colpos++); if (!*colpos) /* Not found any type of handling? */ break; for (spcpos = colpos; !isspace(*spcpos) && *spcpos; spcpos++); *spcpos = 0; if (!strcmp(colpos, "db") || !strcmp(colpos, "nis") || !strcmp(colpos, "nis+")) ret = PASSWD_DB; break; } fclose(f); return ret; } /* * Convert quota format name to number */ int name2fmt(char *str) { int fmt; for (fmt = 0; fmt < QFMT_NAMES; fmt++) if (!strcmp(str, fmtnames[fmt])) return fmt; errstr(_("Unknown quota format: %s\nSupported formats are:\n\ vfsold - original quota format\n\ vfsv0 - standard quota format\n\ vfsv1 - quota format with 64-bit limits\n\ rpc - use RPC calls\n\ xfs - XFS quota format\n"), str); return QF_ERROR; } /* * Convert quota format number to name */ char *fmt2name(int fmt) { return fmtnames[fmt]; } /* * Convert output format name to number */ int name2ofmt(char *str) { int fmt; for (fmt = 0; fmt < QOFMT_NAMES; fmt++) if (!strcmp(str, ofmtnames[fmt])) return fmt; errstr(_("Unknown output format: %s\nSupported formats are:\n\ default - default\n\ csv - comma-separated values\n\ xml - simple XML\n"), str); return QOF_ERROR; } /* * Convert output format number to name */ char *ofmt2name(int fmt) { return ofmtnames[fmt]; } /* * Convert kernel to utility quota format number */ static int kern2utilfmt(int kernfmt) { switch (kernfmt) { case QFMT_VFS_OLD: return QF_VFSOLD; case QFMT_VFS_V0: return QF_VFSV0; case QFMT_VFS_V1: return QF_VFSV1; case QFMT_OCFS2: return QF_META; } return -1; } /* * Convert utility to kernel quota format number */ int util2kernfmt(int fmt) { switch (fmt) { case QF_VFSOLD: return QFMT_VFS_OLD; case QF_VFSV0: return QFMT_VFS_V0; case QF_VFSV1: return QFMT_VFS_V1; } return -1; } /* * Convert time difference of seconds and current time */ void difftime2str(time_t seconds, char *buf) { time_t now; buf[0] = 0; if (!seconds) return; time(&now); if (seconds <= now) { strcpy(buf, _("none")); return; } time2str(seconds - now, buf, TF_ROUND); } /* * Round difference of two time_t values into int32_t */ int32_t difftime2net(time_t later, time_t sooner) { if ((later - sooner) > INT32_MAX) return INT32_MAX; if ((later - sooner) < INT32_MIN) return INT32_MIN; return (later - sooner); } /* * Convert time to printable form */ void time2str(time_t seconds, char *buf, int flags) { uint minutes, hours, days; if (flags & TF_ROUND) { minutes = (seconds + 30) / 60; /* Rounding */ hours = minutes / 60; minutes %= 60; days = hours / 24; hours %= 24; if (days >= 2) snprintf(buf, MAXTIMELEN, _("%ddays"), days); else snprintf(buf, MAXTIMELEN, _("%02d:%02d"), hours + days * 24, minutes); } else { minutes = seconds / 60; seconds %= 60; hours = minutes / 60; minutes %= 60; days = hours / 24; hours %= 24; if (seconds || (!minutes && !hours && !days)) snprintf(buf, MAXTIMELEN, _("%useconds"), (uint)(seconds+minutes*60+hours*3600+days*3600*24)); else if (minutes) snprintf(buf, MAXTIMELEN, _("%uminutes"), (uint)(minutes+hours*60+days*60*24)); else if (hours) snprintf(buf, MAXTIMELEN, _("%uhours"), (uint)(hours+days*24)); else snprintf(buf, MAXTIMELEN, _("%udays"), days); } } /* * Convert number with unit to time in seconds */ int str2timeunits(time_t num, char *unit, time_t *res) { if (!strcmp(unit, _("second")) || !strcmp(unit, _("seconds"))) *res = num; else if (!strcmp(unit, _("minute")) || !strcmp(unit, _("minutes"))) *res = num * 60; else if (!strcmp(unit, _("hour")) || !strcmp(unit, _("hours"))) *res = num * 60 * 60; else if (!strcmp(unit, _("day")) || !strcmp(unit, _("days"))) *res = num * 24 * 60 * 60; else return -1; return 0; } #define DIV_ROUND_UP(x, d) (((x) + d - 1) / d) /* * Convert number in quota blocks to some nice short form for printing */ void space2str(qsize_t space, char *buf, enum s2s_unit format) { int i; char suffix[8] = "KMGT"; qsize_t aspace; int sign = 1; long long unit; aspace = space = qb2kb(space); if (format == S2S_NONE) { sprintf(buf, "%lld", (long long)space); return; } if (aspace < 0) { aspace = -space; sign = -1; } if (format == S2S_AUTO) { for (i = 3; i >= 0; i--) { unit = 1LL << (QUOTABLOCK_BITS*i); if (aspace >= unit * 100) goto print; } unit = 1; i = 0; } else { i = format - S2S_KB; unit = 1LL << (QUOTABLOCK_BITS*i); } print: sprintf(buf, "%lld%c", (long long)DIV_ROUND_UP(aspace, unit) * sign, suffix[i]); } /* * Convert block number with unit from string to quota blocks. * Return NULL on success, static error message otherwise. */ const char *str2space(const char *string, qsize_t *space) { char *unit; long long int number; int unit_shift; number = strtoll(string, &unit, 0); if (number == LLONG_MAX || number == LLONG_MIN) return _("Integer overflow while parsing space number."); if (!unit || unit[0] == '\0' || !strcmp(unit, _("K"))) unit_shift = 0; else if (!strcmp(unit, _("M"))) unit_shift = 10; else if (!strcmp(unit, _("G"))) unit_shift = 20; else if (!strcmp(unit, _("T"))) unit_shift = 30; else return _("Unknown space binary unit. " "Valid units are K, M, G, T."); if (number > (QSIZE_MAX >> unit_shift) || number < -(QSIZE_MAX >> unit_shift)) return _("Integer overflow while interpreting space unit."); *space = number << unit_shift; return NULL; } /* * Convert number to some nice short form for printing */ void number2str(long long num, char *buf, enum s2s_unit format) { int i; unsigned long long div;; char suffix[8] = " kmgt"; long long anum = num; int sign = 1; if (format == S2S_NONE) { sprintf(buf, "%lld", num); return; } if (num < 0) { anum = -num; sign = -1; } if (format == S2S_AUTO) { for (i = 4, div = 1000000000000LL; i > 0; i--, div /= 1000) if (anum >= 100*div) break; } else { div = 1; for (i = 0; i < format - S2S_NONE; i++) div *= 1000; } if (suffix[i] != ' ') { sprintf(buf, "%lld%c", DIV_ROUND_UP(anum, div) * sign, suffix[i]); } else { sprintf(buf, "%lld", DIV_ROUND_UP(anum, div) * sign); } } /* * Convert inode number with unit from string to quota inodes. * Return NULL on success, static error message otherwise. */ const char *str2number(const char *string, qsize_t *inodes) { char *unit; long long int number, multiple; number = strtoll(string, &unit, 0); if (number == LLONG_MAX || number == LLONG_MIN) return _("Integer overflow while parsing number."); if (!unit || unit[0] == '\0') multiple = 1; else if (!strcmp(unit, _("k"))) multiple = 1000; else if (!strcmp(unit, _("m"))) multiple = 1000000; else if (!strcmp(unit, _("g"))) multiple = 1000000000; else if (!strcmp(unit, _("t"))) multiple = 1000000000000ULL; else return _("Unknown decimal unit. " "Valid units are k, m, g, t."); if (number > QSIZE_MAX / multiple || number < -(QSIZE_MAX / multiple)) return _("Integer overflow while interpreting decimal unit."); *inodes = number * multiple; return NULL; } /* * Wrappers for mount options processing functions */ /* * Check for XFS filesystem with quota accounting enabled */ static int hasxfsquota(const char *dev, struct mntent *mnt, int type, int flags) { struct xfs_mem_dqinfo info; if (flags & MS_XFS_DISABLED) return QF_XFS; memset(&info, 0, sizeof(struct xfs_mem_dqinfo)); if (!quotactl(QCMD(Q_XFS_GETQSTAT, type), dev, 0, (void *)&info)) { #ifdef XFS_ROOTHACK int sbflags = (info.qs_flags & 0xff00) >> 8; #endif /* XFS_ROOTHACK */ if (type == USRQUOTA && (info.qs_flags & XFS_QUOTA_UDQ_ACCT)) return QF_XFS; else if (type == GRPQUOTA && (info.qs_flags & XFS_QUOTA_GDQ_ACCT)) return QF_XFS; else if (type == PRJQUOTA && (info.qs_flags & XFS_QUOTA_PDQ_ACCT)) return QF_XFS; #ifdef XFS_ROOTHACK /* * Old XFS filesystems (up to XFS 1.2 / Linux 2.5.47) had a * hack to allow enabling quota on the root filesystem without * having to specify it at mount time. */ else if (strcmp(mnt->mnt_dir, "/")) return QF_ERROR; else if (type == USRQUOTA && (sbflags & XFS_QUOTA_UDQ_ACCT)) return QF_XFS; else if (type == GRPQUOTA && (sbflags & XFS_QUOTA_GDQ_ACCT)) return QF_XFS; else if (type == PRJQUOTA && (sbflags & XFS_QUOTA_PDQ_ACCT)) return QF_XFS; #endif /* XFS_ROOTHACK */ } return QF_ERROR; } static int hasvfsmetaquota(const char *dev, struct mntent *mnt, int type, int flags) { uint32_t fmt; if (!quotactl(QCMD(Q_GETFMT, type), dev, 0, (void *)&fmt)) return QF_META; return QF_ERROR; } /* Return pointer to given mount option in mount option string */ char *str_hasmntopt(const char *optstring, const char *opt) { const char *p = optstring; const char *s; int len = strlen(opt); do { s = p; while (*p && *p != ',' && *p != '=') p++; /* Found option? */ if (p - s == len && !strncmp(s, opt, len)) return (char *)s; /* Skip mount option argument if there's any */ if (*p == '=') { p++; while (*p && *p != ',') p++; } /* Skip separating ',' */ if (*p) p++; } while (*p); return NULL; } /* Return if given option has nonempty argument */ static char *hasmntoptarg(const char *optstring, const char *opt) { char *p = str_hasmntopt(optstring, opt); if (!p) return NULL; p += strlen(opt); if (*p == '=' && p[1] != ',') return p+1; return NULL; } /* Copy out mount option argument to a buffer */ static void copy_mntoptarg(char *buf, const char *optarg, int buflen) { char *sep = strchr(optarg, ','); if (!sep) sstrncpy(buf, optarg, buflen); else sstrncpy(buf, optarg, min(buflen, sep - optarg + 1)); } /* * Check to see if a particular quota is to be enabled (filesystem mounted with proper option) */ static int hasquota(const char *dev, struct mntent *mnt, int type, int flags) { if (!strcmp(mnt->mnt_type, MNTTYPE_GFS2) || !strcmp(mnt->mnt_type, MNTTYPE_XFS) || !strcmp(mnt->mnt_type, MNTTYPE_EXFS)) return hasxfsquota(dev, mnt, type, flags); if (!strcmp(mnt->mnt_type, MNTTYPE_OCFS2)) return hasvfsmetaquota(dev, mnt, type, flags); /* * For ext4 we check whether it has quota in system files and if not, * we fall back on checking standard quotas. Furthermore we cannot use * standard GETFMT quotactl because that does not distinguish between * quota in system file and quota in ordinary file. */ if (!strcmp(mnt->mnt_type, MNTTYPE_EXT4) || !strcmp(mnt->mnt_type, MNTTYPE_F2FS)) { struct if_dqinfo kinfo; if (quotactl(QCMD(Q_GETINFO, type), dev, 0, (void *)&kinfo) == 0) { if (kinfo.dqi_flags & DQF_SYS_FILE) return QF_META; } } /* NFS always has quota or better there is no good way how to detect it */ if (nfs_fstype(mnt->mnt_type)) return QF_RPC; if ((type == USRQUOTA) && (hasmntopt(mnt, MNTOPT_USRQUOTA) || hasmntoptarg(mnt->mnt_opts, MNTOPT_USRJQUOTA))) return QF_VFSUNKNOWN; if ((type == GRPQUOTA) && (hasmntopt(mnt, MNTOPT_GRPQUOTA) || hasmntoptarg(mnt->mnt_opts, MNTOPT_GRPJQUOTA))) return QF_VFSUNKNOWN; if ((type == USRQUOTA) && hasmntopt(mnt, MNTOPT_QUOTA)) return QF_VFSUNKNOWN; return -1; } /* Check whether quotafile for given format exists - return its name in namebuf */ static int check_fmtfile_ok(char *name, int type, int fmt, int flags) { if (!flags) return 1; if (flags & NF_EXIST) { struct stat st; if (stat(name, &st) < 0) { if (errno != ENOENT) errstr(_("Cannot stat quota file %s: %s\n"), name, strerror(errno)); return 0; } } if (flags & NF_FORMAT) { int fd, ret = 0; if ((fd = open(name, O_RDONLY)) >= 0) { if (is_tree_qfmt(fmt)) ret = quotafile_ops_2.check_file(fd, type, fmt); else ret = quotafile_ops_1.check_file(fd, type, fmt); close(fd); if (ret <= 0) return 0; } else if (errno != ENOENT && errno != EPERM) { errstr(_("Cannot open quotafile %s: %s\n"), name, strerror(errno)); return 0; } } return 1; } /* * Get quotafile name for given entry. Return 0 in case format check succeeded, * otherwise return -1. * Note that formats without quotafile *must* be detected prior to calling this function */ int get_qf_name(struct mount_entry *mnt, int type, int fmt, int flags, char **filename) { char *option, *pathname, has_quota_file_definition = 0; char qfullname[PATH_MAX]; qfullname[0] = 0; if (type == USRQUOTA && (option = str_hasmntopt(mnt->me_opts, MNTOPT_USRQUOTA))) { if (*(pathname = option + strlen(MNTOPT_USRQUOTA)) == '=') has_quota_file_definition = 1; } else if (type == USRQUOTA && (option = hasmntoptarg(mnt->me_opts, MNTOPT_USRJQUOTA))) { pathname = option; has_quota_file_definition = 1; sstrncpy(qfullname, mnt->me_dir, sizeof(qfullname)); sstrncat(qfullname, "/", sizeof(qfullname)); } else if (type == GRPQUOTA && (option = str_hasmntopt(mnt->me_opts, MNTOPT_GRPQUOTA))) { pathname = option + strlen(MNTOPT_GRPQUOTA); if (*pathname == '=') { has_quota_file_definition = 1; pathname++; } } else if (type == GRPQUOTA && (option = hasmntoptarg(mnt->me_opts, MNTOPT_GRPJQUOTA))) { pathname = option; has_quota_file_definition = 1; sstrncpy(qfullname, mnt->me_dir, sizeof(qfullname)); sstrncat(qfullname, "/", sizeof(qfullname)); } else if (type == USRQUOTA && (option = str_hasmntopt(mnt->me_opts, MNTOPT_QUOTA))) { pathname = option + strlen(MNTOPT_QUOTA); if (*pathname == '=') { has_quota_file_definition = 1; pathname++; } } else return -1; if (has_quota_file_definition) { int len = strlen(qfullname); copy_mntoptarg(qfullname + len, pathname, sizeof(qfullname) - len); } else { snprintf(qfullname, PATH_MAX, "%s/%s.%s", mnt->me_dir, basenames[fmt], extensions[type]); } if (check_fmtfile_ok(qfullname, type, fmt, flags)) { *filename = sstrdup(qfullname); return 0; } return -1; } #define START_MNT_POINTS 256 /* The number of mount points we start with... */ /* * Create NULL terminated list of quotafile handles from given list of mountpoints * List of zero length means scan all entries in /etc/mtab */ struct quota_handle **create_handle_list(int count, char **mntpoints, int type, int fmt, int ioflags, int mntflags) { struct mount_entry *mnt; int gotmnt = 0; static int hlist_allocated = 0; static struct quota_handle **hlist = NULL; if (!hlist_allocated) { hlist = smalloc(START_MNT_POINTS * sizeof(struct quota_handle *)); hlist_allocated = START_MNT_POINTS; } /* If directories are specified, cache all NFS mountpoints */ if (count && !(mntflags & MS_LOCALONLY)) mntflags |= MS_NFS_ALL; if (init_mounts_scan(count, mntpoints, mntflags) < 0) die(2, _("Cannot initialize mountpoint scan.\n")); while ((mnt = get_next_mount())) { #ifndef RPC if (nfs_fstype(mnt->me_type)) continue; #endif if (fmt == -1 || count) { add_entry: if (gotmnt+1 >= hlist_allocated) { hlist_allocated += START_MNT_POINTS; hlist = srealloc(hlist, hlist_allocated * sizeof(struct quota_handle *)); } if (!(hlist[gotmnt] = init_io(mnt, type, fmt, ioflags))) continue; gotmnt++; } else { switch (fmt) { case QF_RPC: if (nfs_fstype(mnt->me_type)) goto add_entry; break; case QF_XFS: if (!strcmp(mnt->me_type, MNTTYPE_XFS) || !strcmp(mnt->me_type, MNTTYPE_GFS2) || !strcmp(mnt->me_type, MNTTYPE_EXFS)) goto add_entry; break; default: if (strcmp(mnt->me_type, MNTTYPE_XFS) && strcmp(mnt->me_type, MNTTYPE_GFS2) && strcmp(mnt->me_type, MNTTYPE_EXFS) && !nfs_fstype(mnt->me_type)) goto add_entry; break; } } } end_mounts_scan(); hlist[gotmnt] = NULL; if (count && gotmnt != count) die(1, _("Not all specified mountpoints are using quota.\n")); return hlist; } /* * Free given list of handles */ int dispose_handle_list(struct quota_handle **hlist) { int i; int ret = 0; for (i = 0; hlist[i]; i++) if (end_io(hlist[i]) < 0) { errstr(_("Error while releasing file on %s\n"), hlist[i]->qh_quotadev); ret = -1; } return ret; } /* * Check whether given device name matches this quota handle */ int devcmp_handle(const char *dev, struct quota_handle *h) { struct stat sbuf; if (stat(dev, &sbuf) < 0) return (strcmp(dev, h->qh_quotadev) == 0); if (!S_ISBLK(sbuf.st_mode)) return (strcmp(dev, h->qh_quotadev) == 0); if (sbuf.st_rdev != h->qh_stat.st_rdev) return 0; return 1; } /* * Check whether two quota handles are for the same device */ int devcmp_handles(struct quota_handle *a, struct quota_handle *b) { if (!S_ISBLK(a->qh_stat.st_mode) || !S_ISBLK(b->qh_stat.st_mode)) return (strcmp(a->qh_quotadev, b->qh_quotadev) == 0); if (a->qh_stat.st_rdev != b->qh_stat.st_rdev) return 0; return 1; } /* * Check kernel quota version */ int kernel_iface; /* Kernel interface type */ static int kernel_qfmt_num; /* Number of different supported formats */ static int kernel_qfmt[QUOTAFORMATS]; /* Formats supported by kernel */ #ifndef FS_DQSTATS #define FS_DQSTATS 16 #endif #ifndef FS_DQ_SYNCS #define FS_DQ_SYNCS 8 #endif void init_kernel_interface(void) { struct stat st; struct sigaction sig, oldsig; /* This signal handling is needed because old kernels send us SIGSEGV as they try to resolve the device */ sig.sa_handler = SIG_IGN; sig.sa_sigaction = NULL; if (sigemptyset(&sig.sa_mask) < 0) die(2, _("Cannot create set for sigaction(): %s\n"), strerror(errno)); sig.sa_flags = 0; if (sigaction(SIGSEGV, &sig, &oldsig) < 0) die(2, _("Cannot set signal handler: %s\n"), strerror(errno)); kernel_qfmt_num = 0; /* Detect new kernel interface; Assume generic interface unless we can prove there is not one... */ if (!stat("/proc/sys/fs/quota", &st) || errno != ENOENT) { kernel_iface = IFACE_GENERIC; kernel_qfmt[kernel_qfmt_num++] = QF_META; kernel_qfmt[kernel_qfmt_num++] = QF_XFS; kernel_qfmt[kernel_qfmt_num++] = QF_VFSOLD; kernel_qfmt[kernel_qfmt_num++] = QF_VFSV0; kernel_qfmt[kernel_qfmt_num++] = QF_VFSV1; } else { struct v2_dqstats v2_stats; if (!stat("/proc/fs/xfs/stat", &st) || !stat("/proc/fs/exfs/stat", &st)) kernel_qfmt[kernel_qfmt_num++] = QF_XFS; else { fs_quota_stat_t dummy; if (!quotactl(QCMD(Q_XGETQSTAT, 0), "/dev/root", 0, (void *)&dummy) || (errno != EINVAL && errno != ENOSYS)) kernel_qfmt[kernel_qfmt_num++] = QF_XFS; } if (quotactl(QCMD(Q_V2_GETSTATS, 0), NULL, 0, (void *)&v2_stats) >= 0) { kernel_qfmt[kernel_qfmt_num++] = QF_VFSV0; kernel_iface = IFACE_VFSV0; } else if (errno != ENOSYS && errno != ENOTSUP) { /* RedHat 7.1 (2.4.2-2) newquota check * Q_V2_GETSTATS in it's old place, Q_GETQUOTA in the new place * (they haven't moved Q_GETSTATS to its new value) */ int err_stat = 0; int err_quota = 0; char tmp[1024]; /* Just temporary buffer */ if (quotactl(QCMD(Q_V1_GETSTATS, 0), NULL, 0, tmp)) err_stat = errno; if (quotactl(QCMD(Q_V1_GETQUOTA, 0), "/dev/null", 0, tmp)) err_quota = errno; /* On a RedHat 2.4.2-2 we expect 0, EINVAL * On a 2.4.x we expect 0, ENOENT * On a 2.4.x-ac we wont get here */ if (err_stat == 0 && err_quota == EINVAL) { kernel_qfmt[kernel_qfmt_num++] = QF_VFSV0; kernel_iface = IFACE_VFSV0; } else { kernel_qfmt[kernel_qfmt_num++] = QF_VFSOLD; kernel_iface = IFACE_VFSOLD; } } } if (sigaction(SIGSEGV, &oldsig, NULL) < 0) die(2, _("Cannot reset signal handler: %s\n"), strerror(errno)); } /* Return whether kernel is able to handle given format */ int kern_qfmt_supp(int fmt) { int i; if (fmt == -1) return kernel_qfmt_num > 0; for (i = 0; i < kernel_qfmt_num; i++) if (fmt == kernel_qfmt[i]) return 1; return 0; } /* Check whether old quota is turned on on given device */ static int v1_kern_quota_on(const char *dev, int type) { char tmp[1024]; /* Just temporary buffer */ qid_t id = (type == USRQUOTA) ? getuid() : getgid(); if (!quotactl(QCMD(Q_V1_GETQUOTA, type), dev, id, tmp)) /* OK? */ return 1; return 0; } /* Check whether new quota is turned on on given device */ static int v2_kern_quota_on(const char *dev, int type) { char tmp[1024]; /* Just temporary buffer */ qid_t id = (type == USRQUOTA) ? getuid() : getgid(); if (!quotactl(QCMD(Q_V2_GETQUOTA, type), dev, id, tmp)) /* OK? */ return 1; return 0; } /* * Check whether quota is turned on on given device. This quotactl always * worked for XFS and it works even for VFS quotas for kernel 4.1 and newer. * * We return 0 when quota is not turned on, 1 when only accounting is turned * on, and 2 when both accounting and enforcement is turned on. We return -1 * on error. */ int kern_quota_state_xfs(const char *dev, int type) { struct xfs_mem_dqinfo info; if (!quotactl(QCMD(Q_XFS_GETQSTAT, type), dev, 0, (void *)&info)) { if (type == USRQUOTA) { return !!(info.qs_flags & XFS_QUOTA_UDQ_ACCT) + !!(info.qs_flags & XFS_QUOTA_UDQ_ENFD); } if (type == GRPQUOTA) { return !!(info.qs_flags & XFS_QUOTA_GDQ_ACCT) + !!(info.qs_flags & XFS_QUOTA_GDQ_ENFD); } if (type == PRJQUOTA) { return !!(info.qs_flags & XFS_QUOTA_PDQ_ACCT) + !!(info.qs_flags & XFS_QUOTA_PDQ_ENFD); } return 0; } return -1; } /* * Check whether is quota turned on on given device for given type */ int kern_quota_on(struct mount_entry *mnt, int type, int fmt) { if (mnt->me_qfmt[type] < 0) return -1; if (fmt == QF_RPC) return -1; if (mnt->me_qfmt[type] == QF_XFS) { if ((fmt == -1 || fmt == QF_XFS) && kern_quota_state_xfs(mnt->me_devname, type) > 0) return QF_XFS; return -1; } /* No more chances for XFS format to succeed... */ if (fmt == QF_XFS) return -1; /* Meta format is always enabled */ if (mnt->me_qfmt[type] == QF_META) return QF_META; /* Check whether quota is turned on... */ if (kernel_iface == IFACE_GENERIC) { int actfmt; if (quotactl(QCMD(Q_GETFMT, type), mnt->me_devname, 0, (void *)&actfmt) >= 0) { actfmt = kern2utilfmt(actfmt); if (actfmt >= 0) return actfmt; } } else { if ((fmt == -1 || fmt == QF_VFSV0) && v2_kern_quota_on(mnt->me_devname, type)) return QF_VFSV0; if ((fmt == -1 || fmt == QF_VFSOLD) && v1_kern_quota_on(mnt->me_devname, type)) return QF_VFSOLD; } return -1; } /* * * mtab/fstab handling routines * */ struct searched_dir { int sd_dir; /* Is searched dir mountpoint or in fact device? */ dev_t sd_dev; /* Device mountpoint lies on */ ino_t sd_ino; /* Inode number of mountpoint */ const char *sd_name; /* Name of given dir/device */ }; #define ALLOC_ENTRIES_NUM 16 /* Allocate entries by this number */ static int mnt_entries_cnt; /* Number of cached mountpoint entries */ static struct mount_entry *mnt_entries; /* Cached mounted filesystems */ static int check_dirs_cnt, act_checked; /* Number of dirs to check; Actual checked dir/(mountpoint in case of -a) */ static struct searched_dir *check_dirs; /* Directories to check */ /* Cache mtab/fstab */ static int cache_mnt_table(int flags) { FILE *mntf; struct mntent *mnt; struct stat st; struct statfs fsstat; int allocated = 0, i = 0; dev_t dev = 0; char mntpointbuf[PATH_MAX]; int autofsdircnt, autofsdir_allocated; char **autofsdir; #ifdef ALT_MTAB mntf = setmntent(ALT_MTAB, "r"); if (mntf) goto alloc; #endif mntf = setmntent(_PATH_MOUNTED, "r"); if (mntf) goto alloc; /* Fallback to fstab when mtab not available */ if (!(mntf = setmntent(_PATH_MNTTAB, "r"))) { errstr(_("Cannot open any file with mount points.\n")); return -1; } alloc: /* Prepare table of mount entries */ mnt_entries = smalloc(sizeof(struct mount_entry) * ALLOC_ENTRIES_NUM); mnt_entries_cnt = 0; allocated += ALLOC_ENTRIES_NUM; /* Prepare table of autofs mountpoints */ autofsdir = smalloc(sizeof(char *) * ALLOC_ENTRIES_NUM); autofsdircnt = 0; autofsdir_allocated = ALLOC_ENTRIES_NUM; while ((mnt = getmntent(mntf))) { const char *devname; char *opt; int qfmt[MAXQUOTAS]; if (!(devname = get_device_name(mnt->mnt_fsname))) { errstr(_("Cannot get device name for %s\n"), mnt->mnt_fsname); continue; } /* Check for mountpoints under autofs and skip them*/ for (i = 0; i < autofsdircnt; i++) { int slen = strlen(autofsdir[i]); if (slen <= strlen(mnt->mnt_dir) && !strncmp(autofsdir[i], mnt->mnt_dir, slen)) break; } if (i < autofsdircnt) { free((char *)devname); continue; } if (flags & MS_NO_AUTOFS && !strcmp(mnt->mnt_type, MNTTYPE_AUTOFS)) { /* Autofs dir to remember? */ if (autofsdircnt == autofsdir_allocated) { autofsdir_allocated += ALLOC_ENTRIES_NUM; autofsdir = srealloc(autofsdir, autofsdir_allocated * sizeof(char *)); } autofsdir[autofsdircnt] = smalloc(strlen(mnt->mnt_dir) + 2); strcpy(autofsdir[autofsdircnt], mnt->mnt_dir); strcat(autofsdir[autofsdircnt], "/"); autofsdircnt++; free((char *)devname); continue; } if (flags & MS_LOCALONLY && nfs_fstype(mnt->mnt_type)) { free((char *)devname); continue; } if (hasmntopt(mnt, MNTOPT_NOQUOTA)) { free((char *)devname); continue; } if (hasmntopt(mnt, MNTOPT_BIND)) { free((char *)devname); continue; /* We just ignore bind mounts... */ } if ((opt = hasmntoptarg(mnt->mnt_opts, MNTOPT_LOOP))) { char loopdev[PATH_MAX]; copy_mntoptarg(opt, loopdev, PATH_MAX); free((char *)devname); devname = sstrdup(loopdev); } /* Further we are not interested in mountpoints without quotas and we don't want to touch them */ qfmt[USRQUOTA] = hasquota(devname, mnt, USRQUOTA, flags); qfmt[GRPQUOTA] = hasquota(devname, mnt, GRPQUOTA, flags); qfmt[PRJQUOTA] = hasquota(devname, mnt, PRJQUOTA, flags); if (qfmt[USRQUOTA] < 0 && qfmt[GRPQUOTA] < 0 && qfmt[PRJQUOTA] < 0) { free((char *)devname); continue; } if (!realpath(mnt->mnt_dir, mntpointbuf)) { errstr(_("Cannot resolve mountpoint path %s: %s\n"), mnt->mnt_dir, strerror(errno)); free((char *)devname); continue; } if (statfs(mntpointbuf, &fsstat) != 0) { errstr(_("Cannot statfs() %s: %s\n"), mntpointbuf, strerror(errno)); free((char *)devname); continue; } /* Do not scan quotas on "magic" automount points */ if (fsstat.f_blocks == 0 && fsstat.f_bfree == 0 && fsstat.f_bavail == 0) { free((char *)devname); continue; } if (!nfs_fstype(mnt->mnt_type)) { if (stat(devname, &st) < 0) { /* Can't stat mounted device? */ errstr(_("Cannot stat() mounted device %s: %s\n"), devname, strerror(errno)); free((char *)devname); continue; } if (!S_ISBLK(st.st_mode) && !S_ISCHR(st.st_mode)) { errstr(_("Device (%s) filesystem is mounted on unsupported device type. Skipping.\n"), devname); free((char *)devname); continue; } dev = st.st_rdev; for (i = 0; i < mnt_entries_cnt && mnt_entries[i].me_dev != dev; i++); } /* Cope with network filesystems or new mountpoint */ if (nfs_fstype(mnt->mnt_type) || i == mnt_entries_cnt) { if (stat(mnt->mnt_dir, &st) < 0) { /* Can't stat mountpoint? We have better ignore it... */ errstr(_("Cannot stat() mountpoint %s: %s\n"), mnt->mnt_dir, strerror(errno)); free((char *)devname); continue; } if (nfs_fstype(mnt->mnt_type)) { /* For network filesystems we must get device from root */ dev = st.st_dev; if (!(flags & MS_NFS_ALL)) { for (i = 0; i < mnt_entries_cnt && mnt_entries[i].me_dev != dev; i++); } else /* Always behave as if the device was unique */ i = mnt_entries_cnt; } } if (i == mnt_entries_cnt) { /* New mounted device? */ if (allocated == mnt_entries_cnt) { allocated += ALLOC_ENTRIES_NUM; mnt_entries = srealloc(mnt_entries, allocated * sizeof(struct mount_entry)); } mnt_entries[i].me_type = sstrdup(mnt->mnt_type); mnt_entries[i].me_opts = sstrdup(mnt->mnt_opts); mnt_entries[i].me_dev = dev; mnt_entries[i].me_ino = st.st_ino; mnt_entries[i].me_devname = devname; mnt_entries[i].me__dir = sstrdup(mntpointbuf); mnt_entries[i].me_dir = NULL; memcpy(&mnt_entries[i].me_qfmt, qfmt, sizeof(qfmt)); mnt_entries_cnt++; } else free((char *)devname); /* We don't need it any more */ } endmntent(mntf); for (i = 0; i < autofsdircnt; i++) free(autofsdir[i]); free(autofsdir); return 0; } /* Find mountpoint of filesystem hosting dir in 'st'; Store it in 'st' */ static const char *find_dir_mntpoint(struct stat *st) { int i; for (i = 0; i < mnt_entries_cnt; i++) if (mnt_entries[i].me_dev == st->st_dev) { st->st_ino = mnt_entries[i].me_ino; return mnt_entries[i].me__dir; } return NULL; } /* Process and store given paths */ static int process_dirs(int dcnt, char **dirs, int flags) { struct stat st; int i; char mntpointbuf[PATH_MAX]; check_dirs_cnt = 0; act_checked = -1; if (dcnt) { check_dirs = smalloc(sizeof(struct searched_dir) * dcnt); for (i = 0; i < dcnt; i++) { if (!strncmp(dirs[i], "UUID=", 5) || !strncmp(dirs[i], "LABEL=", 6)) { char *devname = (char *)get_device_name(dirs[i]); if (!devname) { errstr(_("Cannot find a device with %s.\nSkipping...\n"), dirs[i]); continue; } if (stat(devname, &st) < 0) { errstr(_("Cannot stat() a mountpoint with %s: %s\nSkipping...\n"), dirs[i], strerror(errno)); free(devname); continue; } free(devname); } else if (stat(dirs[i], &st) < 0) { errstr(_("Cannot stat() given mountpoint %s: %s\nSkipping...\n"), dirs[i], strerror(errno)); continue; } check_dirs[check_dirs_cnt].sd_dir = S_ISDIR(st.st_mode); if (S_ISDIR(st.st_mode)) { const char *realmnt = dirs[i]; /* Return st of mountpoint of dir in st.. */ if (flags & MS_NO_MNTPOINT && !(realmnt = find_dir_mntpoint(&st))) { if (!(flags & MS_QUIET)) errstr(_("Cannot find a filesystem mountpoint for directory %s\n"), dirs[i]); continue; } check_dirs[check_dirs_cnt].sd_dev = st.st_dev; check_dirs[check_dirs_cnt].sd_ino = st.st_ino; if (!realpath(realmnt, mntpointbuf)) { errstr(_("Cannot resolve path %s: %s\n"), realmnt, strerror(errno)); continue; } } else if (S_ISBLK(st.st_mode) || S_ISCHR(st.st_mode)) { int mentry; check_dirs[check_dirs_cnt].sd_dev = st.st_rdev; for (mentry = 0; mentry < mnt_entries_cnt && mnt_entries[mentry].me_dev != st.st_rdev; mentry++); if (mentry == mnt_entries_cnt) { if (!(flags & MS_QUIET)) errstr(_("Cannot find mountpoint for device %s\n"), dirs[i]); continue; } sstrncpy(mntpointbuf, mnt_entries[mentry].me__dir, PATH_MAX-1); } else { errstr(_("Specified path %s is not directory nor device.\n"), dirs[i]); continue; } check_dirs[check_dirs_cnt].sd_name = sstrdup(mntpointbuf); check_dirs_cnt++; } if (!check_dirs_cnt) { if (!(flags & MS_QUIET)) errstr(_("No correct mountpoint specified.\n")); free(check_dirs); return -1; } } return 0; } /* * Initialize mountpoint scan */ int init_mounts_scan(int dcnt, char **dirs, int flags) { if (cache_mnt_table(flags) < 0) return -1; if (process_dirs(dcnt, dirs, flags) < 0) { end_mounts_scan(); return -1; } return 0; } /* Find next usable mountpoint when scanning all mountpoints */ static int find_next_entry_all(int *pos) { while (++act_checked < mnt_entries_cnt) { if (!str_hasmntopt(mnt_entries[act_checked].me_opts, MNTOPT_NOAUTO)) break; } if (act_checked >= mnt_entries_cnt) return 0; *pos = act_checked; return 1; } /* Find next usable mountpoint when scanning selected mountpoints */ static int find_next_entry_sel(int *pos) { int i; struct searched_dir *sd; restart: if (++act_checked == check_dirs_cnt) return 0; sd = check_dirs + act_checked; for (i = 0; i < mnt_entries_cnt; i++) { if (sd->sd_dir) { if (sd->sd_dev == mnt_entries[i].me_dev && sd->sd_ino == mnt_entries[i].me_ino) break; } else if (sd->sd_dev == mnt_entries[i].me_dev) break; } if (i == mnt_entries_cnt) { errstr(_("Mountpoint (or device) %s not found or has no quota enabled.\n"), sd->sd_name); goto restart; } *pos = i; return 1; } /* * Return next directory from the list */ struct mount_entry *get_next_mount(void) { int mntpos; if (!check_dirs_cnt) { /* Scan all mountpoints? */ if (!find_next_entry_all(&mntpos)) return NULL; mnt_entries[mntpos].me_dir = mnt_entries[mntpos].me__dir; } else { if (!find_next_entry_sel(&mntpos)) return NULL; mnt_entries[mntpos].me_dir = check_dirs[act_checked].sd_name; } return &mnt_entries[mntpos]; } /* * Free all structures allocated for mountpoint scan */ void end_mounts_scan(void) { int i; for (i = 0; i < mnt_entries_cnt; i++) { free(mnt_entries[i].me_type); free(mnt_entries[i].me_opts); free((char *)mnt_entries[i].me_devname); free((char *)mnt_entries[i].me__dir); } free(mnt_entries); mnt_entries = NULL; mnt_entries_cnt = 0; if (check_dirs_cnt) { for (i = 0; i < check_dirs_cnt; i++) free((char *)check_dirs[i].sd_name); free(check_dirs); } check_dirs = NULL; check_dirs_cnt = 0; } /* Parse kernel version and return 1 if ext4 supports quota feature */ int ext4_supports_quota_feature(void) { struct utsname stats; int v; char *errch; if (uname(&stats) < 0) { errstr(_("Cannot get system info: %s\n"), strerror(errno)); return 0; } if (strcmp(stats.sysname, "Linux")) return 0; v = strtol(stats.release, &errch, 10); if (v < 4) return 0; if (v > 4) return 1; if (*errch != '.') return 0; v = strtol(errch + 1, &errch, 10); if (*errch != '.' || v < 9) return 0; return 1; } �����������������������������������quota-4.09/quotasys.h�������������������������������������������������������������������������������0000664�0000000�0000000�00000015044�14463210551�0014645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Headerfile of quota interactions with system - filenames, fstab... * */ #ifndef GUARD_QUOTASYS_H #define GUARD_QUOTASYS_H #include <sys/types.h> #include <inttypes.h> #include "mntopt.h" #include "quota.h" #include "common.h" #define MAXNAMELEN 64 /* Maximal length of user/group name */ #define MAXTIMELEN 40 /* Maximal length of time string */ #define MAXNUMLEN 32 /* Maximal length of number */ /* Flags for formatting time */ #define TF_ROUND 0x1 /* Should be printed time rounded? */ /* Flags for IO initialization */ #define IOI_READONLY 0x1 /* Only readonly access */ #define IOI_INITSCAN 0x2 /* Prepare handle for scanning dquots */ #define IOI_NFS_MIXED_PATHS 0x4 /* Trim leading / from NFSv4 mountpoints */ /* Interface versions */ #define IFACE_VFSOLD 1 #define IFACE_VFSV0 2 #define IFACE_GENERIC 3 /* Path to export table of NFS daemon */ #define NFSD_XTAB_PATH "/var/lib/nfs/etab" /* Supported kernel interface */ extern int kernel_iface; struct mount_entry { char *me_type; /* Type of filesystem for given entry */ char *me_opts; /* Options of filesystem */ dev_t me_dev; /* Device filesystem is mounted on */ ino_t me_ino; /* Inode number of root of filesystem */ const char *me_devname; /* Name of device (after pass through get_device_name()) */ const char *me__dir; /* One mountpoint of a filesystem (strdup()ed) */ const char *me_dir; /* Current mountpoint of a filesystem to process */ int me_qfmt[MAXQUOTAS]; /* Detected quota formats */ }; struct fs_project { qid_t pr_id; char *pr_name; }; /* * Exported functions */ /* Check whether type is one of the NFS filesystems */ int nfs_fstype(char *); /* Quota file is treated as metadata? */ int meta_qf_fstype(char *type); /* Convert quota type to written form */ char *type2name(int); /* Rewind /etc/projid to the beginning */ void setprent(void); /* Close /etc/projid file */ void endprent(void); /* Get next entry in /etc/projid */ struct fs_project *getprent(void); /* Convert username to uid */ uid_t user2uid(char *, int flag, int *err); /* Convert groupname to gid */ gid_t group2gid(char *, int flag, int *err); /* Convert project name to project id */ qid_t project2pid(char *name, int flag, int *err); /* Convert user/groupname to id */ int name2id(char *name, int qtype, int flag, int *err); /* Convert uid to username */ int uid2user(uid_t, char *); /* Convert gid to groupname */ int gid2group(gid_t, char *); /* Convert project id to name */ int pid2project(qid_t, char *); /* Convert id to user/group name */ int id2name(int id, int qtype, char *buf); /* Possible default passwd handling */ #define PASSWD_FILES 0 #define PASSWD_DB 1 /* Parse /etc/nsswitch.conf and return type of default passwd handling */ int passwd_handling(void); /* Convert quota format name to number */ int name2fmt(char *str); /* Convert quota format number to name */ char *fmt2name(int fmt); /* Convert output format name to number */ int name2ofmt(char *str); /* Convert output format number to name */ char *ofmt2name(int fmt); /* Convert utility to kernel format numbers */ int util2kernfmt(int fmt); /* Convert time difference between given time and current time to printable form */ void difftime2str(time_t, char *); /* Round difference of two time_t values into int32_t */ int32_t difftime2net(time_t later, time_t sooner); /* Convert time to printable form */ void time2str(time_t, char *, int); /* Convert number and units to time in seconds */ int str2timeunits(time_t, char *, time_t *); /* Convert number in quota blocks to short printable form */ void space2str(qsize_t, char *, enum s2s_unit); /* Convert block number with unit from string to quota blocks */ const char *str2space(const char *string, qsize_t *space); /* Convert number to short printable form */ void number2str(long long, char *, enum s2s_unit); /* Convert inode number with unit from string to quota inodes. */ const char *str2number(const char *string, qsize_t *inodes); /* Return pointer to given mount option in mount option string */ char *str_hasmntopt(const char *optstring, const char *opt); /* Check to see if particular quota type is configured */ static inline int me_hasquota(struct mount_entry *mnt, int type) { return mnt->me_qfmt[type] >= 0; } /* Flags for get_qf_name() */ #define NF_EXIST 1 /* Check whether file exists */ #define NF_FORMAT 2 /* Check whether file is in proper format */ /* Get quotafile name for given entry */ int get_qf_name(struct mount_entry *mnt, int type, int fmt, int flags, char **filename); /* Detect newest quota format with existing file */ int detect_quota_files(struct mount_entry *mnt, int type, int fmt); /* Create NULL-terminated list of handles for quotafiles for given mountpoints */ struct quota_handle **create_handle_list(int count, char **mntpoints, int type, int fmt, int ioflags, int mntflags); /* Dispose given list of handles */ int dispose_handle_list(struct quota_handle **hlist); /* Check whether given device name matches quota handle device */ int devcmp_handle(const char *dev, struct quota_handle *h); /* Check whether two quota handles have same device */ int devcmp_handles(struct quota_handle *a, struct quota_handle *b); /* Check kernel supported quotafile format */ void init_kernel_interface(void); /* * Check whether is quota turned on on given device for given type. This * works for XFS for all kernels and for other filesystems since kernel 4.1. */ int kern_quota_state_xfs(const char *dev, int type); /* Check whether is quota turned on on given device for given type */ int kern_quota_on(struct mount_entry *mnt, int type, int fmt); /* Return whether kernel is able to handle given format */ int kern_qfmt_supp(int fmt); /* Flags for init_mounts_scan() */ #define MS_NO_MNTPOINT 0x01 /* Specified directory needn't be mountpoint */ #define MS_NO_AUTOFS 0x02 /* Ignore autofs mountpoints */ #define MS_QUIET 0x04 /* Be quiet with error reporting */ #define MS_LOCALONLY 0x08 /* Ignore nfs mountpoints */ #define MS_XFS_DISABLED 0x10 /* Return also XFS mountpoints with quota disabled */ #define MS_NFS_ALL 0x20 /* Don't filter NFS mountpoints on the same device */ /* Initialize mountpoints scan */ int init_mounts_scan(int dcnt, char **dirs, int flags); /* Return next mountpoint for scan */ struct mount_entry *get_next_mount(void); /* Free all structures associated with mountpoints scan */ void end_mounts_scan(void); /* Parse kernel version and return 1 if ext4 supports quota feature */ int ext4_supports_quota_feature(void); /* Quota output formats */ #define QOF_ERROR -1 #define QOF_DEFAULT 0 #define QOF_CSV 1 #define QOF_XML 2 #endif /* GUARD_QUOTASYS_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotatab���������������������������������������������������������������������������������0000664�0000000�0000000�00000000405�14463210551�0014342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # This is sample quotatab (/etc/quotatab) # Here you can specify description of each device for user # # Comments begin with hash in the beginning of the line # Example of description # /dev/loop0: This is loopback device # /dev/hda4: Your home directory �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/quotatab.5�������������������������������������������������������������������������������0000664�0000000�0000000�00000001373�14463210551�0014512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH QUOTATAB 5 .SH NAME quotatab \- Descriptions of devices with disk quotas .SH SYNOPSIS .B /etc/quotatab .SH DESCRIPTION The .B quotatab file lists human descriptions of devices for the purpose of .BR warnquota (8) notifications. .P Each line consists of a device path name followed by a colon and a description. White space, apostrophe, and double quote characters surrounding the names and descriptions will be stripped. The description field can encode a new-line as a pipe character. .P Empty lines or lines starting with a hash sign or a semicolon are ignored. .SH EXAMPLE .PP # comment .RS 0 /dev/sda2: Home directories.|This becomes the second line. .SH FILES .PD 0 .TP 20 .B /etc/quotatab list of device descriptions .PD .SH SEE ALSO .BR warnquota (8). ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/repquota.8�������������������������������������������������������������������������������0000664�0000000�0000000�00000011401�14463210551�0014526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH REPQUOTA 8 .UC 4 .SH NAME repquota \- summarize quotas for a filesystem .SH SYNOPSIS .B /usr/sbin/repquota [ .B \-vspiugP ] [ .B \-c | .B \-C ] [ .B \-t | .B \-n ] [ .B \-F .I format-name ] .IR filesystem .\|.\|. .LP .B /usr/sbin/repquota [ .B \-avtpsiugP ] [ .B \-c | .B \-C ] [ .B \-t | .B \-n ] [ .B \-F .I format-name ] .SH DESCRIPTION .IX "repquota command" "" "\fLrepquota\fP \(em summarize quotas" .IX "user quotas" "repquota command" "" "\fLrepquota\fP \(em summarize quotas" .IX "disk quotas" "repquota command" "" "\fLrepquota\fP \(em summarize quotas" .IX "quotas" "repquota command" "" "\fLrepquota\fP \(em summarize quotas" .IX "filesystem" "repquota command" "" "\fLrepquota\fP \(em summarize quotas" .IX "summarize filesystem quotas repquota" "" "summarize filesystem quotas \(em \fLrepquota\fP" .IX "report filesystem quotas repquota" "" "report filesystem quotas \(em \fLrepquota\fP" .IX display "filesystem quotas \(em \fLrepquota\fP" .LP .B repquota prints a summary of the disc usage and quotas for the specified file systems. For each user the current number of files and amount of space (in kilobytes) is printed, along with any quota limits set with .BR edquota (8) or .BR setquota (8). In the second column repquota prints two characters marking which limits are exceeded. If user is over his space softlimit or reaches his space hardlimit in case softlimit is unset, the first character is '+'. Otherwise the character printed is '-'. The second character denotes the state of inode usage analogously. .B repquota has to translate ids of all users/groups/projects to names (unless option .B -n was specified) so it may take a while to print all the information. To make translating as fast as possible .B repquota tries to detect (by reading .BR /etc/nsswitch.conf ) whether entries are stored in standard plain text file or in a database and either translates chunks of 1024 names or each name individually. You can override this autodetection by .B -c or .B -C options. .SH OPTIONS .TP .B -a, --all Report on all filesystems indicated in .B /etc/mtab to be read-write with quotas. .TP .B -v, --verbose Report all quotas, even if there is no usage. Be also more verbose about quotafile information. .TP .B -c, --cache Cache entries to report and translate uids/gids to names in big chunks by scanning all users (default). This is good (fast) behaviour when using /etc/passwd file. .TP .B -C, --no-cache Translate individual entries. This is faster when you have users stored in database. .TP .B -t, --truncate-names Truncate user/group names longer than 9 characters. This results in nicer output when there are such names. .TP .B -n, --no-names Don't resolve UIDs/GIDs to names. This can speedup printing a lot. .TP .B -s, --human-readable[=\f2units\f1] Try to report used space, number of used inodes and limits in more appropriate units than the default ones. Units can be also specified explicitely by an optional argument in format [ .BR kgt ],[ .BR kgt ] where the first character specifies space units and the second character specifies inode units. .TP .B -p, --raw-grace When user is in grace period, report time in seconds since epoch when his grace time runs out (or has run out). Field is '0' when no grace time is in effect. This is especially useful when parsing output by a script. .TP .B -i, --no-autofs Ignore mountpoints mounted by automounter. .TP .B \-F, --format=\f2format-name\f1 Report quota for specified format (ie. don't perform format autodetection). Possible format names are: .B vfsold Original quota format with 16-bit UIDs / GIDs, .B vfsv0 Quota format with 32-bit UIDs / GIDs, 64-bit space usage, 32-bit inode usage and limits, .B vfsv1 Quota format with 64-bit quota limits and usage, .B xfs (quota on XFS filesystem) .TP .B -g, --group Report quotas for groups. .TP .B -P, --project Report quotas for projects. .TP .B -u, --user Report quotas for users. This is the default. .TP .B -O, --output=\f2format-name\f1 Output quota report in the specified format. Possible format names are: .B default The default format, optimized for console viewing .B csv Comma-separated values, a text file with the columns delimited by commas .B xml Output is XML encoded, useful for processing with XSLT .LP Only the super-user may view quotas which are not their own. .SH FILES .PD 0 .TP 20 .BR aquota.user " or " aquota.group quota file at the filesystem root (version 2 quota, non-XFS filesystems) .TP .BR quota.user " or " quota.group quota file at the filesystem root (version 1 quota, non-XFS filesystems) .TP .B /etc/mtab default filesystems .TP .B /etc/passwd default set of users .TP .B /etc/group default set of groups .PD .SH SEE ALSO .BR quota (1), .BR quotactl (2), .BR edquota (8), .BR quotacheck (8), .BR quotaon (8), .BR quota_nld (8), .BR setquota (8), .BR warnquota (8) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/repquota.c�������������������������������������������������������������������������������0000664�0000000�0000000�00000032451�14463210551�0014611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Utility for reporting quotas * * Based on old repquota. * Jan Kara <jack@suse.cz> - Sponsored by SuSE CZ */ #include "config.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <time.h> #include <errno.h> #include <pwd.h> #include <grp.h> #include <getopt.h> #include "pot.h" #include "common.h" #include "quotasys.h" #include "quotaio.h" #define PRINTNAMELEN 9 /* Number of characters to be reserved for name on screen */ #define MAX_CACHE_DQUOTS 1024 /* Number of dquots in cache */ #define FL_USER 1 #define FL_GROUP 2 #define FL_VERBOSE 4 #define FL_ALL 8 /* Dump quota files on all filesystems */ #define FL_TRUNCNAMES 16 /* Truncate names to fit into the screen */ #define FL_NONAME 64 /* Don't translate ids to names */ #define FL_NOCACHE 128 /* Don't cache dquots before resolving */ #define FL_NOAUTOFS 256 /* Ignore autofs mountpoints */ #define FL_RAWGRACE 512 /* Print grace times in seconds since epoch */ #define FL_PROJECT 1024 static int flags, fmt = -1, ofmt = QOF_DEFAULT; static char **mnt; static int mntcnt; static int cached_dquots; static struct dquot dquot_cache[MAX_CACHE_DQUOTS]; static enum s2s_unit spaceunit = S2S_NONE, inodeunit = S2S_NONE; char *progname; static void usage(void) { errstr(_("Utility for reporting quotas.\nUsage:\n%s [-vugsi] [-c|C] [-t|n] [-F quotaformat] [-O (default | xml | csv)] (-a | mntpoint)\n\n\ -v, --verbose display also users/groups without any usage\n\ -u, --user display information about users\n\ -g, --group display information about groups\n\ -P, --project display information about projects\n\ -s, --human-readable[=units] display numbers in human friendly units (MB, GB,\n\ ...). Units can be also specified explicitely by\n\ an optional argument in format [kgt],[kgt] where\n\ the first character specifies space units and the\n\ second character specifies inode units\n\ -t, --truncate-names truncate names to 9 characters\n\ -p, --raw-grace print grace time in seconds since epoch\n\ -n, --no-names do not translate uid/gid to name\n\ -i, --no-autofs avoid autofs mountpoints\n\ -c, --cache translate big number of ids at once\n\ -C, --no-cache translate ids one by one\n\ -F, --format=formatname report information for specific format\n\ -O, --output=format format output as xml or csv\n\ -a, --all report information for all mount points with\n\ quotas\n\ -h, --help display this help message and exit\n\ -V, --version display version information and exit\n\n"), progname); fprintf(stderr, _("Bugs to %s\n"), PACKAGE_BUGREPORT); exit(1); } static void parse_options(int argcnt, char **argstr) { int ret; int cache_specified = 0; struct option long_opts[] = { { "version", 0, NULL, 'V' }, { "all", 0, NULL, 'a' }, { "verbose", 0, NULL, 'v' }, { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "project", 0, NULL, 'P' }, { "help", 0, NULL, 'h' }, { "truncate-names", 0, NULL, 't' }, { "raw-grace", 0, NULL, 'p' }, { "human-readable", 2, NULL, 's' }, { "no-names", 0, NULL, 'n' }, { "cache", 0, NULL, 'c' }, { "no-cache", 0, NULL, 'C' }, { "no-autofs", 0, NULL, 'i' }, { "format", 1, NULL, 'F' }, { "output", 1, NULL, 'O' }, { NULL, 0, NULL, 0 } }; while ((ret = getopt_long(argcnt, argstr, "VavugPhts::pncCiF:O:", long_opts, NULL)) != -1) { switch (ret) { case '?': case 'h': usage(); case 'V': version(); exit(0); case 'u': flags |= FL_USER; break; case 'g': flags |= FL_GROUP; break; case 'P': flags |= FL_PROJECT; break; case 'v': flags |= FL_VERBOSE; break; case 'a': flags |= FL_ALL; break; case 't': flags |= FL_TRUNCNAMES; break; case 'p': flags |= FL_RAWGRACE; break; case 's': inodeunit = spaceunit = S2S_AUTO; if (optarg) { if (unitopt2unit(optarg, &spaceunit, &inodeunit) < 0) die(1, _("Bad output format units for human readable output: %s\n"), optarg); } break; case 'C': flags |= FL_NOCACHE; cache_specified = 1; break; case 'c': cache_specified = 1; break; case 'i': flags |= FL_NOAUTOFS; break; case 'F': if ((fmt = name2fmt(optarg)) == QF_ERROR) exit(1); break; case 'O': if ((ofmt = name2ofmt(optarg)) == QOF_ERROR) exit(1); break; case 'n': flags |= FL_NONAME; break; } } if ((flags & FL_ALL && optind != argcnt) || (!(flags & FL_ALL) && optind == argcnt)) { fputs(_("Bad number of arguments.\n"), stderr); usage(); } if (fmt == QF_RPC) { fputs(_("Repquota cannot report through RPC calls.\n"), stderr); exit(1); } if (flags & FL_NONAME && flags & FL_TRUNCNAMES) { fputs(_("Specified both -n and -t but only one of them can be used.\n"), stderr); exit(1); } if (!(flags & (FL_USER | FL_GROUP | FL_PROJECT))) flags |= FL_USER; if (!(flags & FL_ALL)) { mnt = argstr + optind; mntcnt = argcnt - optind; } if (!cache_specified && !(flags & FL_NONAME) && passwd_handling() == PASSWD_DB) flags |= FL_NOCACHE; } /* Are we over soft or hard limit? */ static char overlim(qsize_t usage, qsize_t softlim, qsize_t hardlim) { if ((usage > softlim && softlim) || (usage > hardlim && hardlim)) return '+'; return '-'; } /* Are we over soft or hard limit? More descriptive */ static char * overlimd(qsize_t usage, qsize_t softlim, qsize_t hardlim) { if (usage > hardlim && hardlim) return "hard"; else if (usage > softlim && softlim) return "soft"; else return "ok"; } /* Print one quota entry */ static void print(struct dquot *dquot, char *name) { char pname[MAXNAMELEN]; char time[MAXTIMELEN]; char numbuf[3][MAXNUMLEN]; struct util_dqblk *entry = &dquot->dq_dqb; if (!entry->dqb_curspace && !entry->dqb_curinodes && !(flags & FL_VERBOSE)) return; sstrncpy(pname, name, sizeof(pname)); if (flags & FL_TRUNCNAMES) pname[PRINTNAMELEN] = 0; if (entry->dqb_bsoftlimit && toqb(entry->dqb_curspace) >= entry->dqb_bsoftlimit) if (flags & FL_RAWGRACE) sprintf(time, "%llu", (unsigned long long)entry->dqb_btime); else difftime2str(entry->dqb_btime, time); else if (flags & FL_RAWGRACE) strcpy(time, "0"); else time[0] = 0; space2str(toqb(entry->dqb_curspace), numbuf[0], spaceunit); space2str(entry->dqb_bsoftlimit, numbuf[1], spaceunit); space2str(entry->dqb_bhardlimit, numbuf[2], spaceunit); if (ofmt == QOF_DEFAULT) { printf("%-*s %c%c %7s %7s %7s %6s", PRINTNAMELEN, pname, overlim(qb2kb(toqb(entry->dqb_curspace)), qb2kb(entry->dqb_bsoftlimit), qb2kb(entry->dqb_bhardlimit)), overlim(entry->dqb_curinodes, entry->dqb_isoftlimit, entry->dqb_ihardlimit), numbuf[0], numbuf[1], numbuf[2], time); } else if (ofmt == QOF_CSV) { printf("%s,%s,%s,%s,%s,%s,%s", pname, overlimd(qb2kb(toqb(entry->dqb_curspace)), qb2kb(entry->dqb_bsoftlimit), qb2kb(entry->dqb_bhardlimit)), overlimd(entry->dqb_curinodes, entry->dqb_isoftlimit, entry->dqb_ihardlimit), numbuf[0], numbuf[1], numbuf[2], time); } else if (ofmt == QOF_XML) { char *spacehdr; if (spaceunit != S2S_NONE) spacehdr = "space"; else spacehdr = "block"; printf(" <Quota user='%s'>\n\ <QuotaStatus %s='%s' inode='%s' />\n\ <%sLimits used='%s' soft='%s' hard='%s' grace='%s' />\n", pname, spacehdr, overlimd(qb2kb(toqb(entry->dqb_curspace)), qb2kb(entry->dqb_bsoftlimit), qb2kb(entry->dqb_bhardlimit)), overlimd(entry->dqb_curinodes, entry->dqb_isoftlimit, entry->dqb_ihardlimit), spacehdr, numbuf[0], numbuf[1], numbuf[2], time); } if (entry->dqb_isoftlimit && entry->dqb_curinodes >= entry->dqb_isoftlimit) if (flags & FL_RAWGRACE) sprintf(time, "%llu", (unsigned long long)entry->dqb_itime); else difftime2str(entry->dqb_itime, time); else if (flags & FL_RAWGRACE) strcpy(time, "0"); else time[0] = 0; number2str(entry->dqb_curinodes, numbuf[0], inodeunit); number2str(entry->dqb_isoftlimit, numbuf[1], inodeunit); number2str(entry->dqb_ihardlimit, numbuf[2], inodeunit); if (ofmt == QOF_DEFAULT) printf(" %7s %5s %5s %6s\n", numbuf[0], numbuf[1], numbuf[2], time); else if (ofmt == QOF_CSV) printf(",%s,%s,%s,%s\n", numbuf[0], numbuf[1], numbuf[2], time); else if (ofmt == QOF_XML) printf(" <FileLimits used='%s' soft='%s' hard='%s' grace='%s' />\n </Quota>\n", numbuf[0], numbuf[1], numbuf[2], time); } /* Print all dquots in the cache */ static void dump_cached_dquots(int type) { int i; char namebuf[MAXNAMELEN]; if (!cached_dquots) return; if (type == USRQUOTA) { struct passwd *pwent; setpwent(); while ((pwent = getpwent())) { for (i = 0; i < cached_dquots && pwent->pw_uid != dquot_cache[i].dq_id; i++); if (i < cached_dquots && !(dquot_cache[i].dq_flags & DQ_PRINTED)) { print(dquot_cache+i, pwent->pw_name); dquot_cache[i].dq_flags |= DQ_PRINTED; } } endpwent(); } else if (type == GRPQUOTA) { struct group *grent; setgrent(); while ((grent = getgrent())) { for (i = 0; i < cached_dquots && grent->gr_gid != dquot_cache[i].dq_id; i++); if (i < cached_dquots && !(dquot_cache[i].dq_flags & DQ_PRINTED)) { print(dquot_cache+i, grent->gr_name); dquot_cache[i].dq_flags |= DQ_PRINTED; } } endgrent(); } else { struct fs_project *prent; setprent(); while ((prent = getprent())) { for (i = 0; i < cached_dquots && prent->pr_id != dquot_cache[i].dq_id; i++); if (i < cached_dquots && !(dquot_cache[i].dq_flags & DQ_PRINTED)) { print(dquot_cache+i, prent->pr_name); dquot_cache[i].dq_flags |= DQ_PRINTED; } } endprent(); } for (i = 0; i < cached_dquots; i++) if (!(dquot_cache[i].dq_flags & DQ_PRINTED)) { sprintf(namebuf, "#%u", dquot_cache[i].dq_id); print(dquot_cache+i, namebuf); } cached_dquots = 0; } /* Callback routine called by scan_dquots on each dquot */ static int output(struct dquot *dquot, char *name) { if (flags & FL_NONAME) { /* We should translate names? */ char namebuf[MAXNAMELEN]; sprintf(namebuf, "#%u", dquot->dq_id); print(dquot, namebuf); } else if (name || flags & FL_NOCACHE) { /* We shouldn't do batched id->name translations? */ char namebuf[MAXNAMELEN]; if (!name) { id2name(dquot->dq_id, dquot->dq_h->qh_type, namebuf); name = namebuf; } print(dquot, name); } else { /* Lets cache the dquot for later printing */ memcpy(dquot_cache+cached_dquots++, dquot, sizeof(struct dquot)); if (cached_dquots >= MAX_CACHE_DQUOTS) dump_cached_dquots(dquot->dq_h->qh_type); } return 0; } /* Dump information stored in one quota file */ static void report_it(struct quota_handle *h, int type) { char bgbuf[MAXTIMELEN], igbuf[MAXTIMELEN]; char *spacehdr; char *typestr; if (type == USRQUOTA) typestr = _("User"); else if (type == GRPQUOTA) typestr = _("Group"); else typestr = _("Project"); if (ofmt == QOF_DEFAULT ) printf(_("*** Report for %s quotas on device %s\n"), _(type2name(type)), h->qh_quotadev); else if (ofmt == QOF_XML) printf("<Report type='%s' dev='%s'>\n", type2name(type), h->qh_quotadev); time2str(h->qh_info.dqi_bgrace, bgbuf, TF_ROUND); time2str(h->qh_info.dqi_igrace, igbuf, TF_ROUND); if (ofmt == QOF_DEFAULT) { if (spaceunit != S2S_NONE) spacehdr = _("Space"); else spacehdr = _("Block"); printf(_("Block grace time: %s; Inode grace time: %s\n"), bgbuf, igbuf); printf(_(" %s limits File limits\n"), spacehdr); printf(_("%-9s used soft hard grace used soft hard grace\n"), typestr); printf("----------------------------------------------------------------------\n"); } else if (ofmt == QOF_XML) { printf(" <BlockGraceTime>%s</BlockGraceTime>\n <InodeGraceTime>%s</InodeGraceTime>\n", bgbuf, igbuf); } else if (ofmt == QOF_CSV) { if (spaceunit != S2S_NONE) spacehdr = "Space"; else spacehdr = "Block"; printf("%s,%sStatus,FileStatus,%sUsed,%sSoftLimit,%sHardLimit,%sGrace,FileUsed,FileSoftLimit,FileHardLimit,FileGrace\n", typestr,spacehdr, spacehdr, spacehdr, spacehdr, spacehdr); } if (h->qh_ops->scan_dquots(h, output) < 0) return; dump_cached_dquots(type); if (ofmt == QOF_DEFAULT) { putchar('\n'); if (h->qh_ops->report) h->qh_ops->report(h, flags & FL_VERBOSE); putchar('\n'); } if (ofmt == QOF_XML) printf("</Report>\n"); } static void report(int type) { struct quota_handle **handles; int i; if (flags & FL_ALL) handles = create_handle_list(0, NULL, type, fmt, IOI_READONLY | IOI_INITSCAN, MS_LOCALONLY | (flags & FL_NOAUTOFS ? MS_NO_AUTOFS : 0)); else handles = create_handle_list(mntcnt, mnt, type, fmt, IOI_READONLY | IOI_INITSCAN, MS_LOCALONLY | (flags & FL_NOAUTOFS ? MS_NO_AUTOFS : 0)); for (i = 0; handles[i]; i++) report_it(handles[i], type); dispose_handle_list(handles); } int main(int argc, char **argv) { gettexton(); progname = basename(argv[0]); parse_options(argc, argv); init_kernel_interface(); if (ofmt == QOF_XML) printf("<?xml version=\"1.0\"?>\n<repquota>\n"); if (flags & FL_USER) report(USRQUOTA); if (flags & FL_GROUP) report(GRPQUOTA); if (flags & FL_PROJECT) report(PRJQUOTA); if (ofmt == QOF_XML) printf("</repquota>\n"); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/rpc.rquotad.8����������������������������������������������������������������������������0000664�0000000�0000000�00000005370�14463210551�0015140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH RQUOTAD 8 .SH NAME rpc.rquotad \- remote quota server .SH SYNOPSIS .B /usr/sbin/rpc.rquotad [ .BR \-FI ] [ .B \-p .I port ] [ .B \-s | .B \-S ] [ .B \-x .I path ] .LP .B /usr/sbin/rpc.rquotad [ .B \-h | .B \-V ] .SH DESCRIPTION .LP .IX "rquotad daemon" "" "\fLrquotad\fP \(em remote quota server" .IX daemons "rquotad daemon" "" "\fLrquotad\fP \(em remote quota server" .IX "user quotas" "rquotad daemon" "" "\fLrquotad\fP \(em remote quota server" .IX "disk quotas" "rquotad daemon" "" "\fLrquotad\fP \(em remote quota server" .IX "quotas" "rquotad daemon" "" "\fLrquotad\fP \(em remote quota server" .IX "filesystem" "rquotad daemon" "" "\fLrquotad\fP \(em remote quota server" .IX "remote procedure call services" "rquotad" "" "\fLrquotad\fP \(em remote quota server" .B rpc.rquotad is an .BR rpc (3) server which returns quotas for a user of a local filesystem which is mounted by a remote machine over the .SM NFS\s0. It also allows setting of quotas on .SM NFS mounted filesystem (if configured during compilation and allowed by a command line option .BR \-S ). The results are used by .BR quota (1) to display user quotas for remote filesystems and by .BR edquota (8) to set quotas on remote filesystems. .B rquotad daemon uses tcp-wrappers library (under service name .IR rquotad ) which allows you to specify hosts allowed/disallowed to use the daemon (see .BR hosts.allow (5) manpage for more information). The .B rquotad daemon is normally started at boot time from the system startup scripts. .SH OPTIONS .TP .B \-h, \-\-help Show program usage and exit. .B \-V, \-\-version Show version of quota tools. .TP .B \-s, \-\-no-setquota Don't allow setting of quotas (default). This option is available only if utilities were compiled with the .I rpcsetquota option. .TP .B \-S, \-\-setquota Allow setting of quotas. This option is available only if utilities were compiled with the .I rpcsetquota option. .TP .B \-F, \-\-foreground Run daemon in foreground (may be useful for debugging purposes). .TP .B \-I, \-\-autofs Do not ignore autofs mountpoints. .TP .B \-p \f2port\f3, \-\-port \f2port\f1 Listen on alternate port .IR port. .TP .B \-x \f2path\f3, \-\-xtab \f2path\f1 Set an alternative file with NFSD export table. This file is used to determine pseudoroot of NFSv4 exports. The pseudoroot is then prepended to each relative path (i.e. a path not beginning by '/') received in a quota RPC request. .SH FILES .PD 0 .TP 20 .B aquota.user or aquota.group quota file at the filesystem root (version 2 quota, non-XFS filesystems) .TP .B quota.user or quota.group quota file at the filesystem root (version 1 quota, non-XFS filesystems) .TP .B /etc/mtab default filesystems .PD .SH "SEE ALSO" .BR quota (1), .BR rpc (3), .BR nfs (5), .BR services (5), .BR inetd (8) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/rquota.3���������������������������������������������������������������������������������0000664�0000000�0000000�00000001145�14463210551�0014200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\"@(#)rquota.3; .TH RQUOTA 3 .SH NAME rquota \- implement quotas on remote machines .SH PROTOCOL .B /usr/include/rpcsvc/rquota.x .SH DESCRIPTION .IX "rquota()" "" "\fLrquota()\fP \(em implement quotas on remote machines" .LP The .B rquota(\|) protocol inquires about quotas on remote machines. It is used in conjunction with .SM NFS\s0, since .SM NFS itself does not implement quotas. .SH PROGRAMMING .LP .B #include <rpcsvc/rquota.h> .LP The following .SM XDR routines are available in .BR librpcsvc : .nf .B xdr_getquota_arg .B xdr_getquota_rslt .B xdr_rquota .fi .SH SEE ALSO .BR quota (1), .BR quotactl (2) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/rquota.c���������������������������������������������������������������������������������0000664�0000000�0000000�00000017766�14463210551�0014300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Please do not edit this file. * It was generated using rpcgen. */ #include "rquota.h" bool_t xdr_sq_dqblk (XDR *xdrs, sq_dqblk *objp) { register int32_t *buf; if (xdrs->x_op == XDR_ENCODE) { buf = XDR_INLINE (xdrs, 8 * BYTES_PER_XDR_UNIT); if (buf == NULL) { if (!xdr_u_int (xdrs, &objp->rq_bhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_bsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curblocks)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curfiles)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_btimeleft)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_ftimeleft)) return FALSE; } else { IXDR_PUT_U_LONG(buf, objp->rq_bhardlimit); IXDR_PUT_U_LONG(buf, objp->rq_bsoftlimit); IXDR_PUT_U_LONG(buf, objp->rq_curblocks); IXDR_PUT_U_LONG(buf, objp->rq_fhardlimit); IXDR_PUT_U_LONG(buf, objp->rq_fsoftlimit); IXDR_PUT_U_LONG(buf, objp->rq_curfiles); IXDR_PUT_U_LONG(buf, objp->rq_btimeleft); IXDR_PUT_U_LONG(buf, objp->rq_ftimeleft); } return TRUE; } else if (xdrs->x_op == XDR_DECODE) { buf = XDR_INLINE (xdrs, 8 * BYTES_PER_XDR_UNIT); if (buf == NULL) { if (!xdr_u_int (xdrs, &objp->rq_bhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_bsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curblocks)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curfiles)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_btimeleft)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_ftimeleft)) return FALSE; } else { objp->rq_bhardlimit = IXDR_GET_U_LONG(buf); objp->rq_bsoftlimit = IXDR_GET_U_LONG(buf); objp->rq_curblocks = IXDR_GET_U_LONG(buf); objp->rq_fhardlimit = IXDR_GET_U_LONG(buf); objp->rq_fsoftlimit = IXDR_GET_U_LONG(buf); objp->rq_curfiles = IXDR_GET_U_LONG(buf); objp->rq_btimeleft = IXDR_GET_U_LONG(buf); objp->rq_ftimeleft = IXDR_GET_U_LONG(buf); } return TRUE; } if (!xdr_u_int (xdrs, &objp->rq_bhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_bsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curblocks)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curfiles)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_btimeleft)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_ftimeleft)) return FALSE; return TRUE; } bool_t xdr_getquota_args (XDR *xdrs, getquota_args *objp) { register int32_t *buf; if (!xdr_string (xdrs, &objp->gqa_pathp, RQ_PATHLEN)) return FALSE; if (!xdr_int (xdrs, &objp->gqa_uid)) return FALSE; return TRUE; } bool_t xdr_setquota_args (XDR *xdrs, setquota_args *objp) { register int32_t *buf; if (!xdr_int (xdrs, &objp->sqa_qcmd)) return FALSE; if (!xdr_string (xdrs, &objp->sqa_pathp, RQ_PATHLEN)) return FALSE; if (!xdr_int (xdrs, &objp->sqa_id)) return FALSE; if (!xdr_sq_dqblk (xdrs, &objp->sqa_dqblk)) return FALSE; return TRUE; } bool_t xdr_ext_getquota_args (XDR *xdrs, ext_getquota_args *objp) { register int32_t *buf; if (!xdr_string (xdrs, &objp->gqa_pathp, RQ_PATHLEN)) return FALSE; if (!xdr_int (xdrs, &objp->gqa_type)) return FALSE; if (!xdr_int (xdrs, &objp->gqa_id)) return FALSE; return TRUE; } bool_t xdr_ext_setquota_args (XDR *xdrs, ext_setquota_args *objp) { register int32_t *buf; if (!xdr_int (xdrs, &objp->sqa_qcmd)) return FALSE; if (!xdr_string (xdrs, &objp->sqa_pathp, RQ_PATHLEN)) return FALSE; if (!xdr_int (xdrs, &objp->sqa_id)) return FALSE; if (!xdr_int (xdrs, &objp->sqa_type)) return FALSE; if (!xdr_sq_dqblk (xdrs, &objp->sqa_dqblk)) return FALSE; return TRUE; } bool_t xdr_rquota (XDR *xdrs, rquota *objp) { register int32_t *buf; if (xdrs->x_op == XDR_ENCODE) { buf = XDR_INLINE (xdrs, 10 * BYTES_PER_XDR_UNIT); if (buf == NULL) { if (!xdr_int (xdrs, &objp->rq_bsize)) return FALSE; if (!xdr_bool (xdrs, &objp->rq_active)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_bhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_bsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curblocks)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curfiles)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_btimeleft)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_ftimeleft)) return FALSE; } else { IXDR_PUT_LONG(buf, objp->rq_bsize); IXDR_PUT_BOOL(buf, objp->rq_active); IXDR_PUT_U_LONG(buf, objp->rq_bhardlimit); IXDR_PUT_U_LONG(buf, objp->rq_bsoftlimit); IXDR_PUT_U_LONG(buf, objp->rq_curblocks); IXDR_PUT_U_LONG(buf, objp->rq_fhardlimit); IXDR_PUT_U_LONG(buf, objp->rq_fsoftlimit); IXDR_PUT_U_LONG(buf, objp->rq_curfiles); IXDR_PUT_U_LONG(buf, objp->rq_btimeleft); IXDR_PUT_U_LONG(buf, objp->rq_ftimeleft); } return TRUE; } else if (xdrs->x_op == XDR_DECODE) { buf = XDR_INLINE (xdrs, 10 * BYTES_PER_XDR_UNIT); if (buf == NULL) { if (!xdr_int (xdrs, &objp->rq_bsize)) return FALSE; if (!xdr_bool (xdrs, &objp->rq_active)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_bhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_bsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curblocks)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curfiles)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_btimeleft)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_ftimeleft)) return FALSE; } else { objp->rq_bsize = IXDR_GET_LONG(buf); objp->rq_active = IXDR_GET_BOOL(buf); objp->rq_bhardlimit = IXDR_GET_U_LONG(buf); objp->rq_bsoftlimit = IXDR_GET_U_LONG(buf); objp->rq_curblocks = IXDR_GET_U_LONG(buf); objp->rq_fhardlimit = IXDR_GET_U_LONG(buf); objp->rq_fsoftlimit = IXDR_GET_U_LONG(buf); objp->rq_curfiles = IXDR_GET_U_LONG(buf); objp->rq_btimeleft = IXDR_GET_U_LONG(buf); objp->rq_ftimeleft = IXDR_GET_U_LONG(buf); } return TRUE; } if (!xdr_int (xdrs, &objp->rq_bsize)) return FALSE; if (!xdr_bool (xdrs, &objp->rq_active)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_bhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_bsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curblocks)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fhardlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_fsoftlimit)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_curfiles)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_btimeleft)) return FALSE; if (!xdr_u_int (xdrs, &objp->rq_ftimeleft)) return FALSE; return TRUE; } bool_t xdr_qr_status (XDR *xdrs, qr_status *objp) { register int32_t *buf; if (!xdr_enum (xdrs, (enum_t *) objp)) return FALSE; return TRUE; } bool_t xdr_getquota_rslt (XDR *xdrs, getquota_rslt *objp) { register int32_t *buf; if (!xdr_qr_status (xdrs, &objp->status)) return FALSE; switch (objp->status) { case Q_OK: if (!xdr_rquota (xdrs, &objp->getquota_rslt_u.gqr_rquota)) return FALSE; break; case Q_NOQUOTA: break; case Q_EPERM: break; default: return FALSE; } return TRUE; } bool_t xdr_setquota_rslt (XDR *xdrs, setquota_rslt *objp) { register int32_t *buf; if (!xdr_qr_status (xdrs, &objp->status)) return FALSE; switch (objp->status) { case Q_OK: if (!xdr_rquota (xdrs, &objp->setquota_rslt_u.sqr_rquota)) return FALSE; break; case Q_NOQUOTA: break; case Q_EPERM: break; default: return FALSE; } return TRUE; } ����������quota-4.09/rquota.h���������������������������������������������������������������������������������0000664�0000000�0000000�00000012651�14463210551�0014271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Please do not edit this file. * It was generated using rpcgen. */ #ifndef _RQUOTA_H_RPCGEN #define _RQUOTA_H_RPCGEN #include <rpc/rpc.h> #ifdef __cplusplus extern "C" { #endif #define RQ_PATHLEN 1024 struct sq_dqblk { u_int rq_bhardlimit; u_int rq_bsoftlimit; u_int rq_curblocks; u_int rq_fhardlimit; u_int rq_fsoftlimit; u_int rq_curfiles; u_int rq_btimeleft; u_int rq_ftimeleft; }; typedef struct sq_dqblk sq_dqblk; struct getquota_args { char *gqa_pathp; int gqa_uid; }; typedef struct getquota_args getquota_args; struct setquota_args { int sqa_qcmd; char *sqa_pathp; int sqa_id; sq_dqblk sqa_dqblk; }; typedef struct setquota_args setquota_args; struct ext_getquota_args { char *gqa_pathp; int gqa_type; int gqa_id; }; typedef struct ext_getquota_args ext_getquota_args; struct ext_setquota_args { int sqa_qcmd; char *sqa_pathp; int sqa_id; int sqa_type; sq_dqblk sqa_dqblk; }; typedef struct ext_setquota_args ext_setquota_args; struct rquota { int rq_bsize; bool_t rq_active; u_int rq_bhardlimit; u_int rq_bsoftlimit; u_int rq_curblocks; u_int rq_fhardlimit; u_int rq_fsoftlimit; u_int rq_curfiles; u_int rq_btimeleft; u_int rq_ftimeleft; }; typedef struct rquota rquota; enum qr_status { Q_OK = 1, Q_NOQUOTA = 2, Q_EPERM = 3, }; typedef enum qr_status qr_status; struct getquota_rslt { qr_status status; union { rquota gqr_rquota; } getquota_rslt_u; }; typedef struct getquota_rslt getquota_rslt; struct setquota_rslt { qr_status status; union { rquota sqr_rquota; } setquota_rslt_u; }; typedef struct setquota_rslt setquota_rslt; #define RQUOTAPROG 100011 #define RQUOTAVERS 1 #if defined(__STDC__) || defined(__cplusplus) #define RQUOTAPROC_GETQUOTA 1 extern getquota_rslt * rquotaproc_getquota_1(getquota_args *, CLIENT *); extern getquota_rslt * rquotaproc_getquota_1_svc(getquota_args *, struct svc_req *); #define RQUOTAPROC_GETACTIVEQUOTA 2 extern getquota_rslt * rquotaproc_getactivequota_1(getquota_args *, CLIENT *); extern getquota_rslt * rquotaproc_getactivequota_1_svc(getquota_args *, struct svc_req *); #define RQUOTAPROC_SETQUOTA 3 extern setquota_rslt * rquotaproc_setquota_1(setquota_args *, CLIENT *); extern setquota_rslt * rquotaproc_setquota_1_svc(setquota_args *, struct svc_req *); #define RQUOTAPROC_SETACTIVEQUOTA 4 extern setquota_rslt * rquotaproc_setactivequota_1(setquota_args *, CLIENT *); extern setquota_rslt * rquotaproc_setactivequota_1_svc(setquota_args *, struct svc_req *); extern int rquotaprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); #else /* K&R C */ #define RQUOTAPROC_GETQUOTA 1 extern getquota_rslt * rquotaproc_getquota_1(); extern getquota_rslt * rquotaproc_getquota_1_svc(); #define RQUOTAPROC_GETACTIVEQUOTA 2 extern getquota_rslt * rquotaproc_getactivequota_1(); extern getquota_rslt * rquotaproc_getactivequota_1_svc(); #define RQUOTAPROC_SETQUOTA 3 extern setquota_rslt * rquotaproc_setquota_1(); extern setquota_rslt * rquotaproc_setquota_1_svc(); #define RQUOTAPROC_SETACTIVEQUOTA 4 extern setquota_rslt * rquotaproc_setactivequota_1(); extern setquota_rslt * rquotaproc_setactivequota_1_svc(); extern int rquotaprog_1_freeresult (); #endif /* K&R C */ #define EXT_RQUOTAVERS 2 #if defined(__STDC__) || defined(__cplusplus) extern getquota_rslt * rquotaproc_getquota_2(ext_getquota_args *, CLIENT *); extern getquota_rslt * rquotaproc_getquota_2_svc(ext_getquota_args *, struct svc_req *); extern getquota_rslt * rquotaproc_getactivequota_2(ext_getquota_args *, CLIENT *); extern getquota_rslt * rquotaproc_getactivequota_2_svc(ext_getquota_args *, struct svc_req *); extern setquota_rslt * rquotaproc_setquota_2(ext_setquota_args *, CLIENT *); extern setquota_rslt * rquotaproc_setquota_2_svc(ext_setquota_args *, struct svc_req *); extern setquota_rslt * rquotaproc_setactivequota_2(ext_setquota_args *, CLIENT *); extern setquota_rslt * rquotaproc_setactivequota_2_svc(ext_setquota_args *, struct svc_req *); extern int rquotaprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); #else /* K&R C */ extern getquota_rslt * rquotaproc_getquota_2(); extern getquota_rslt * rquotaproc_getquota_2_svc(); extern getquota_rslt * rquotaproc_getactivequota_2(); extern getquota_rslt * rquotaproc_getactivequota_2_svc(); extern setquota_rslt * rquotaproc_setquota_2(); extern setquota_rslt * rquotaproc_setquota_2_svc(); extern setquota_rslt * rquotaproc_setactivequota_2(); extern setquota_rslt * rquotaproc_setactivequota_2_svc(); extern int rquotaprog_2_freeresult (); #endif /* K&R C */ /* the xdr functions */ #if defined(__STDC__) || defined(__cplusplus) extern bool_t xdr_sq_dqblk (XDR *, sq_dqblk*); extern bool_t xdr_getquota_args (XDR *, getquota_args*); extern bool_t xdr_setquota_args (XDR *, setquota_args*); extern bool_t xdr_ext_getquota_args (XDR *, ext_getquota_args*); extern bool_t xdr_ext_setquota_args (XDR *, ext_setquota_args*); extern bool_t xdr_rquota (XDR *, rquota*); extern bool_t xdr_qr_status (XDR *, qr_status*); extern bool_t xdr_getquota_rslt (XDR *, getquota_rslt*); extern bool_t xdr_setquota_rslt (XDR *, setquota_rslt*); #else /* K&R C */ extern bool_t xdr_sq_dqblk (); extern bool_t xdr_getquota_args (); extern bool_t xdr_setquota_args (); extern bool_t xdr_ext_getquota_args (); extern bool_t xdr_ext_setquota_args (); extern bool_t xdr_rquota (); extern bool_t xdr_qr_status (); extern bool_t xdr_getquota_rslt (); extern bool_t xdr_setquota_rslt (); #endif /* K&R C */ #ifdef __cplusplus } #endif #endif /* !_RQUOTA_H_RPCGEN */ ���������������������������������������������������������������������������������������quota-4.09/rquota.x���������������������������������������������������������������������������������0000664�0000000�0000000�00000006616�14463210551�0014315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* @(#)rquota.x 2.1 88/08/01 4.0 RPCSRC */ /* @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro */ /* * Remote quota protocol * Requires unix authentication */ const RQ_PATHLEN = 1024; struct sq_dqblk { unsigned int rq_bhardlimit; /* absolute limit on disk blks alloc */ unsigned int rq_bsoftlimit; /* preferred limit on disk blks */ unsigned int rq_curblocks; /* current block count */ unsigned int rq_fhardlimit; /* absolute limit on allocated files */ unsigned int rq_fsoftlimit; /* preferred file limit */ unsigned int rq_curfiles; /* current # allocated files */ unsigned int rq_btimeleft; /* time left for excessive disk use */ unsigned int rq_ftimeleft; /* time left for excessive files */ }; struct getquota_args { string gqa_pathp<RQ_PATHLEN>; /* path to filesystem of interest */ int gqa_uid; /* Inquire about quota for uid */ }; struct setquota_args { int sqa_qcmd; string sqa_pathp<RQ_PATHLEN>; /* path to filesystem of interest */ int sqa_id; /* Set quota for uid */ sq_dqblk sqa_dqblk; }; struct ext_getquota_args { string gqa_pathp<RQ_PATHLEN>; /* path to filesystem of interest */ int gqa_type; /* Type of quota info is needed about */ int gqa_id; /* Inquire about quota for id */ }; struct ext_setquota_args { int sqa_qcmd; string sqa_pathp<RQ_PATHLEN>; /* path to filesystem of interest */ int sqa_id; /* Set quota for id */ int sqa_type; /* Type of quota to set */ sq_dqblk sqa_dqblk; }; /* * remote quota structure */ struct rquota { int rq_bsize; /* block size for block counts */ bool rq_active; /* indicates whether quota is active */ unsigned int rq_bhardlimit; /* absolute limit on disk blks alloc */ unsigned int rq_bsoftlimit; /* preferred limit on disk blks */ unsigned int rq_curblocks; /* current block count */ unsigned int rq_fhardlimit; /* absolute limit on allocated files */ unsigned int rq_fsoftlimit; /* preferred file limit */ unsigned int rq_curfiles; /* current # allocated files */ unsigned int rq_btimeleft; /* time left for excessive disk use */ unsigned int rq_ftimeleft; /* time left for excessive files */ }; enum qr_status { Q_OK = 1, /* quota returned */ Q_NOQUOTA = 2, /* noquota for uid */ Q_EPERM = 3 /* no permission to access quota */ }; union getquota_rslt switch (qr_status status) { case Q_OK: rquota gqr_rquota; /* valid if status == Q_OK */ case Q_NOQUOTA: void; case Q_EPERM: void; }; union setquota_rslt switch (qr_status status) { case Q_OK: rquota sqr_rquota; /* valid if status == Q_OK */ case Q_NOQUOTA: void; case Q_EPERM: void; }; program RQUOTAPROG { version RQUOTAVERS { /* * Get all quotas */ getquota_rslt RQUOTAPROC_GETQUOTA(getquota_args) = 1; /* * Get active quotas only */ getquota_rslt RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2; /* * Set all quotas */ setquota_rslt RQUOTAPROC_SETQUOTA(setquota_args) = 3; /* * Get active quotas only */ setquota_rslt RQUOTAPROC_SETACTIVEQUOTA(setquota_args) = 4; } = 1; version EXT_RQUOTAVERS { /* * Get all quotas */ getquota_rslt RQUOTAPROC_GETQUOTA(ext_getquota_args) = 1; /* * Get active quotas only */ getquota_rslt RQUOTAPROC_GETACTIVEQUOTA(ext_getquota_args) = 2; /* * Set all quotas */ setquota_rslt RQUOTAPROC_SETQUOTA(ext_setquota_args) = 3; /* * Set active quotas only */ setquota_rslt RQUOTAPROC_SETACTIVEQUOTA(ext_setquota_args) = 4; } = 2; } = 100011; ������������������������������������������������������������������������������������������������������������������quota-4.09/rquota_client.c��������������������������������������������������������������������������0000664�0000000�0000000�00000022646�14463210551�0015627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * QUOTA An implementation of the diskquota system for the LINUX * operating system. QUOTA is implemented using the BSD systemcall * interface as the means of communication with the user level. * Should work for all filesystems because of integration into the * VFS layer of the operating system. * This is based on the Melbourne quota system wich uses both user and * group quota files. * * This part does the rpc-communication with the rquotad. * * Author: Marco van Wieringen <mvw@planets.elm.net> * * 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 <rpc/rpc.h> #include <sys/types.h> #include <sys/param.h> #include <sys/stat.h> #include <sys/file.h> #include <errno.h> #include <pwd.h> #include <grp.h> #include <ctype.h> #include <stdio.h> #include <string.h> #include <signal.h> #include <time.h> #include <stdint.h> #include "mntopt.h" #include "rquota.h" #include "common.h" #include "quotaio.h" #include "quotasys.h" #if defined(RPC) /* Convert network format of quotas to utils one */ static inline void clinet2utildqblk(struct util_dqblk *u, struct rquota *n) { time_t now; /* Copy the quota */ u->dqb_bhardlimit = toqb(((qsize_t)n->rq_bhardlimit) * n->rq_bsize); u->dqb_bsoftlimit = toqb(((qsize_t)n->rq_bsoftlimit) * n->rq_bsize); u->dqb_ihardlimit = n->rq_fhardlimit; u->dqb_isoftlimit = n->rq_fsoftlimit; u->dqb_curinodes = n->rq_curfiles; u->dqb_curspace = ((qsize_t)n->rq_curblocks) * n->rq_bsize; time(&now); if (n->rq_btimeleft) u->dqb_btime = (int32_t)n->rq_btimeleft + now; else u->dqb_btime = 0; if (n->rq_ftimeleft) u->dqb_itime = (int32_t)n->rq_ftimeleft + now; else u->dqb_itime = 0; } /* Convert utils format of quotas to network one */ static inline void cliutil2netdqblk(struct sq_dqblk *n, struct util_dqblk *u) { time_t now; time(&now); n->rq_bhardlimit = u->dqb_bhardlimit; n->rq_bsoftlimit = u->dqb_bsoftlimit; n->rq_fhardlimit = u->dqb_ihardlimit; n->rq_fsoftlimit = u->dqb_isoftlimit; n->rq_curblocks = toqb(u->dqb_curspace); n->rq_curfiles = u->dqb_curinodes; if (u->dqb_btime) n->rq_btimeleft = difftime2net(u->dqb_btime, now); else n->rq_btimeleft = 0; if (u->dqb_itime) n->rq_ftimeleft = difftime2net(u->dqb_itime, now); else n->rq_ftimeleft = 0; } /* Write appropriate error message */ static int rquota_err(int stat) { switch (stat) { case -1: return -ECONNREFUSED; case 0: return -ENOSYS; case Q_NOQUOTA: return -ENOENT; case Q_OK: return 0; case Q_EPERM: return -EPERM; default: return -EINVAL; } } static int split_nfs_mount(char *devname, char **host, char **path) { char *pathname; /* NFS server name contained in brackets? */ if (*devname == '[') { *host = devname + 1; pathname = strchr(devname, ']'); if (!pathname || pathname[1] != ':') return 0; /* Autofs? */ if (pathname[2] == '(') return 0; *pathname = 0; *path = pathname + 2; return 1; } *host = devname; pathname = strchr(devname, ':'); if (!pathname) return 0; /* Autofs? */ if (pathname[1] == '(') return 0; *pathname = 0; *path = pathname + 1; return 1; } /* * Collect the requested quota information from a remote host. */ int rpc_rquota_get(struct dquot *dquot) { CLIENT *clnt; getquota_rslt *result; union { getquota_args arg; ext_getquota_args ext_arg; } args; char *fsname_tmp, *host, *pathname; struct timeval timeout = { 2, 0 }; int ret; /* * Initialize with NULL. */ memset(&dquot->dq_dqb, 0, sizeof(dquot->dq_dqb)); /* * Convert host:pathname to seperate host and pathname. */ fsname_tmp = (char *)smalloc(strlen(dquot->dq_h->qh_quotadev) + 1); strcpy(fsname_tmp, dquot->dq_h->qh_quotadev); if (!split_nfs_mount(fsname_tmp, &host, &pathname)) { free(fsname_tmp); return -ENOENT; } /* For NFSv4, we send the filesystem path without initial /. Server prepends proper * NFS pseudoroot automatically and uses this for detection of NFSv4 mounts. */ if ((dquot->dq_h->qh_io_flags & IOFL_NFS_MIXED_PATHS) && !strcmp(dquot->dq_h->qh_fstype, MNTTYPE_NFS4)) { while (*pathname == '/') pathname++; } /* * First try EXT_RQUOTAPROG (Extended (LINUX) RPC quota program) */ args.ext_arg.gqa_pathp = pathname; args.ext_arg.gqa_id = dquot->dq_id; args.ext_arg.gqa_type = dquot->dq_h->qh_type; /* * Create a RPC client. */ if ((clnt = clnt_create(host, RQUOTAPROG, EXT_RQUOTAVERS, "udp")) != NULL) { /* * Initialize unix authentication */ clnt->cl_auth = authunix_create_default(); /* * Setup protocol timeout. */ clnt_control(clnt, CLSET_TIMEOUT, (caddr_t) & timeout); /* * Do RPC call and check result. */ result = rquotaproc_getquota_2(&args.ext_arg, clnt); if (result != NULL && result->status == Q_OK) clinet2utildqblk(&dquot->dq_dqb, &result->getquota_rslt_u.gqr_rquota); /* * Destroy unix authentication and RPC client structure. */ auth_destroy(clnt->cl_auth); clnt_destroy(clnt); } else { result = NULL; } if (result == NULL || !result->status) { if (dquot->dq_h->qh_type == USRQUOTA) { /* * Try RQUOTAPROG because server doesn't seem to understand EXT_RQUOTAPROG. (NON-LINUX servers.) */ args.arg.gqa_pathp = pathname; args.arg.gqa_uid = dquot->dq_id; /* * Create a RPC client. */ if ((clnt = clnt_create(host, RQUOTAPROG, RQUOTAVERS, "udp")) != NULL) { /* * Initialize unix authentication */ clnt->cl_auth = authunix_create_default(); /* * Setup protocol timeout. */ clnt_control(clnt, CLSET_TIMEOUT, (caddr_t) & timeout); /* * Do RPC call and check result. */ result = rquotaproc_getquota_1(&args.arg, clnt); if (result != NULL && result->status == Q_OK) clinet2utildqblk(&dquot->dq_dqb, &result->getquota_rslt_u.gqr_rquota); /* * Destroy unix authentication and RPC client structure. */ auth_destroy(clnt->cl_auth); clnt_destroy(clnt); } else { result = NULL; } } } free(fsname_tmp); if (result) ret = result->status; else ret = -1; return rquota_err(ret); } /* * Set the requested quota information on a remote host. */ int rpc_rquota_set(int qcmd, struct dquot *dquot) { #if defined(RPC_SETQUOTA) CLIENT *clnt; setquota_rslt *result; union { setquota_args arg; ext_setquota_args ext_arg; } args; char *fsname_tmp, *host, *pathname; struct timeval timeout = { 2, 0 }; int ret; /* RPC limits values to 32b variables. Prevent value wrapping. */ if (check_dquot_range(dquot) < 0) return -ERANGE; /* * Convert host:pathname to seperate host and pathname. */ fsname_tmp = (char *)smalloc(strlen(dquot->dq_h->qh_quotadev) + 1); strcpy(fsname_tmp, dquot->dq_h->qh_quotadev); if (!split_nfs_mount(fsname_tmp, &host, &pathname)) { free(fsname_tmp); return -ENOENT; } /* For NFSv4, we send the filesystem path without initial /. Server prepends proper * NFS pseudoroot automatically and uses this for detection of NFSv4 mounts. */ if ((dquot->dq_h->qh_io_flags & IOFL_NFS_MIXED_PATHS) && !strcmp(dquot->dq_h->qh_fstype, MNTTYPE_NFS4)) { while (*pathname == '/') pathname++; } /* * First try EXT_RQUOTAPROG (Extended (LINUX) RPC quota program) */ args.ext_arg.sqa_qcmd = qcmd; args.ext_arg.sqa_pathp = pathname; args.ext_arg.sqa_id = dquot->dq_id; args.ext_arg.sqa_type = dquot->dq_h->qh_type; cliutil2netdqblk(&args.ext_arg.sqa_dqblk, &dquot->dq_dqb); if ((clnt = clnt_create(host, RQUOTAPROG, EXT_RQUOTAVERS, "udp")) != NULL) { /* * Initialize unix authentication */ clnt->cl_auth = authunix_create_default(); /* * Setup protocol timeout. */ clnt_control(clnt, CLSET_TIMEOUT, (caddr_t) & timeout); /* * Do RPC call and check result. */ result = rquotaproc_setquota_2(&args.ext_arg, clnt); if (result != NULL && result->status == Q_OK) clinet2utildqblk(&dquot->dq_dqb, &result->setquota_rslt_u.sqr_rquota); /* * Destroy unix authentication and RPC client structure. */ auth_destroy(clnt->cl_auth); clnt_destroy(clnt); } else { result = NULL; } if (result == NULL || !result->status) { if (dquot->dq_h->qh_type == USRQUOTA) { /* * Try RQUOTAPROG because server doesn't seem to understand EXT_RQUOTAPROG. (NON-LINUX servers.) */ args.arg.sqa_qcmd = qcmd; args.arg.sqa_pathp = pathname; args.arg.sqa_id = dquot->dq_id; cliutil2netdqblk(&args.arg.sqa_dqblk, &dquot->dq_dqb); /* * Create a RPC client. */ if ((clnt = clnt_create(host, RQUOTAPROG, RQUOTAVERS, "udp")) != NULL) { /* * Initialize unix authentication */ clnt->cl_auth = authunix_create_default(); /* * Setup protocol timeout. */ clnt_control(clnt, CLSET_TIMEOUT, (caddr_t) & timeout); /* * Do RPC call and check result. */ result = rquotaproc_setquota_1(&args.arg, clnt); if (result != NULL && result->status == Q_OK) clinet2utildqblk(&dquot->dq_dqb, &result->setquota_rslt_u.sqr_rquota); /* * Destroy unix authentication and RPC client structure. */ auth_destroy(clnt->cl_auth); clnt_destroy(clnt); } else { result = NULL; } } } free(fsname_tmp); if (result) ret = result->status; else ret = -1; return rquota_err(ret); #endif return -1; } #endif ������������������������������������������������������������������������������������������quota-4.09/rquota_client.h��������������������������������������������������������������������������0000664�0000000�0000000�00000000550�14463210551�0015622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Header file for rquota functions * */ #ifndef GUARD_RQUOTA_CLIENT_H #define GUARD_RQUOTA_CLIENT_H #include "quotaio.h" /* Collect the requested quota information from a remote host. */ int rpc_rquota_get(struct dquot *dquot); /* Set the requested quota information on a remote host. */ int rpc_rquota_set(int qcmd, struct dquot *dquot); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/rquota_clnt.c����������������������������������������������������������������������������0000664�0000000�0000000�00000006372�14463210551�0015307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Please do not edit this file. * It was generated using rpcgen. */ #include <memory.h> /* for memset */ #include "rquota.h" /* Default timeout can be changed using clnt_control() */ static struct timeval TIMEOUT = { 25, 0 }; getquota_rslt * rquotaproc_getquota_1(getquota_args *argp, CLIENT *clnt) { static getquota_rslt clnt_res; memset((char *)&clnt_res, 0, sizeof(clnt_res)); if (clnt_call (clnt, RQUOTAPROC_GETQUOTA, (xdrproc_t) xdr_getquota_args, (caddr_t) argp, (xdrproc_t) xdr_getquota_rslt, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { return (NULL); } return (&clnt_res); } getquota_rslt * rquotaproc_getactivequota_1(getquota_args *argp, CLIENT *clnt) { static getquota_rslt clnt_res; memset((char *)&clnt_res, 0, sizeof(clnt_res)); if (clnt_call (clnt, RQUOTAPROC_GETACTIVEQUOTA, (xdrproc_t) xdr_getquota_args, (caddr_t) argp, (xdrproc_t) xdr_getquota_rslt, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { return (NULL); } return (&clnt_res); } setquota_rslt * rquotaproc_setquota_1(setquota_args *argp, CLIENT *clnt) { static setquota_rslt clnt_res; memset((char *)&clnt_res, 0, sizeof(clnt_res)); if (clnt_call (clnt, RQUOTAPROC_SETQUOTA, (xdrproc_t) xdr_setquota_args, (caddr_t) argp, (xdrproc_t) xdr_setquota_rslt, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { return (NULL); } return (&clnt_res); } setquota_rslt * rquotaproc_setactivequota_1(setquota_args *argp, CLIENT *clnt) { static setquota_rslt clnt_res; memset((char *)&clnt_res, 0, sizeof(clnt_res)); if (clnt_call (clnt, RQUOTAPROC_SETACTIVEQUOTA, (xdrproc_t) xdr_setquota_args, (caddr_t) argp, (xdrproc_t) xdr_setquota_rslt, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { return (NULL); } return (&clnt_res); } getquota_rslt * rquotaproc_getquota_2(ext_getquota_args *argp, CLIENT *clnt) { static getquota_rslt clnt_res; memset((char *)&clnt_res, 0, sizeof(clnt_res)); if (clnt_call (clnt, RQUOTAPROC_GETQUOTA, (xdrproc_t) xdr_ext_getquota_args, (caddr_t) argp, (xdrproc_t) xdr_getquota_rslt, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { return (NULL); } return (&clnt_res); } getquota_rslt * rquotaproc_getactivequota_2(ext_getquota_args *argp, CLIENT *clnt) { static getquota_rslt clnt_res; memset((char *)&clnt_res, 0, sizeof(clnt_res)); if (clnt_call (clnt, RQUOTAPROC_GETACTIVEQUOTA, (xdrproc_t) xdr_ext_getquota_args, (caddr_t) argp, (xdrproc_t) xdr_getquota_rslt, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { return (NULL); } return (&clnt_res); } setquota_rslt * rquotaproc_setquota_2(ext_setquota_args *argp, CLIENT *clnt) { static setquota_rslt clnt_res; memset((char *)&clnt_res, 0, sizeof(clnt_res)); if (clnt_call (clnt, RQUOTAPROC_SETQUOTA, (xdrproc_t) xdr_ext_setquota_args, (caddr_t) argp, (xdrproc_t) xdr_setquota_rslt, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { return (NULL); } return (&clnt_res); } setquota_rslt * rquotaproc_setactivequota_2(ext_setquota_args *argp, CLIENT *clnt) { static setquota_rslt clnt_res; memset((char *)&clnt_res, 0, sizeof(clnt_res)); if (clnt_call (clnt, RQUOTAPROC_SETACTIVEQUOTA, (xdrproc_t) xdr_ext_setquota_args, (caddr_t) argp, (xdrproc_t) xdr_setquota_rslt, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { return (NULL); } return (&clnt_res); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/rquota_server.c��������������������������������������������������������������������������0000664�0000000�0000000�00000022715�14463210551�0015654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * QUOTA An implementation of the diskquota system for the LINUX * operating system. QUOTA is implemented using the BSD systemcall * interface as the means of communication with the user level. * Should work for all filesystems because of integration into the * VFS layer of the operating system. * This is based on the Melbourne quota system wich uses both user and * group quota files. * * This part does the lookup of the info. * * Author: Marco van Wieringen <mvw@planets.elm.net> * * 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 <rpc/rpc.h> #include <arpa/inet.h> #include <paths.h> #include <stdio.h> #include <syslog.h> #include <time.h> #include <stdint.h> #include "mntopt.h" #include "quotaops.h" #include "bylabel.h" #include "rquota.h" #include "quotaio.h" #include "quotasys.h" #include "dqblk_rpc.h" #include "common.h" #define STDIN_FILENO 0 #define TYPE_EXTENDED 0x01 #define ACTIVE 0x02 #define FACILITY LOG_LOCAL7 #ifndef MAXPATHNAMELEN #define MAXPATHNAMELEN BUFSIZ #endif #define NETTYPE AF_INET /* Options from rquota_svc.c */ #define FL_AUTOFS 4 extern int flags; extern char nfs_pseudoroot[PATH_MAX]; /* * Global unix authentication credentials. */ extern struct authunix_parms *unix_cred; int in_group(gid_t * gids, uint32_t len, gid_t gid) { gid_t *gidsp = gids + len; while (gidsp > gids) if (*(--gids) == gid) return 1; return 0; } static inline void servnet2utildqblk(struct util_dqblk *u, sq_dqblk * n) { time_t now; time(&now); u->dqb_bhardlimit = n->rq_bhardlimit; u->dqb_bsoftlimit = n->rq_bsoftlimit; u->dqb_ihardlimit = n->rq_fhardlimit; u->dqb_isoftlimit = n->rq_fsoftlimit; u->dqb_curspace = ((qsize_t)n->rq_curblocks) << RPC_DQBLK_SIZE_BITS; u->dqb_curinodes = n->rq_curfiles; if (n->rq_btimeleft) u->dqb_btime = (int32_t)n->rq_btimeleft + now; else u->dqb_btime = 0; if (n->rq_ftimeleft) u->dqb_itime = (int32_t)n->rq_ftimeleft + now; else u->dqb_itime = 0; } /* XDR transports 32b variables exactly. Find smallest needed shift to fit * 64b variable into into 32 bits and to preserve precision as high as * possible. */ static int find_block_shift(qsize_t hard, qsize_t soft, qsize_t cur) { int shift; qsize_t value = hard; if (value < soft) value = soft; if (value < cur) value = cur; value >>= 32; for (shift = QUOTABLOCK_BITS; value; shift++) value >>= 1; return shift; } static inline void servutil2netdqblk(struct rquota *n, struct util_dqblk *u) { time_t now; int shift; shift = find_block_shift(u->dqb_bhardlimit, u->dqb_bsoftlimit, toqb(u->dqb_curspace)); n->rq_bsize = 1 << shift; n->rq_bhardlimit = u->dqb_bhardlimit >> (shift - QUOTABLOCK_BITS); n->rq_bsoftlimit = u->dqb_bsoftlimit >> (shift - QUOTABLOCK_BITS); n->rq_fhardlimit = u->dqb_ihardlimit; n->rq_fsoftlimit = u->dqb_isoftlimit; n->rq_curblocks = toqb(u->dqb_curspace) >> (shift - QUOTABLOCK_BITS); n->rq_curfiles = u->dqb_curinodes; time(&now); if (u->dqb_btime) n->rq_btimeleft = difftime2net(u->dqb_btime, now); else n->rq_btimeleft = 0; if (u->dqb_itime) n->rq_ftimeleft = difftime2net(u->dqb_itime, now); else n->rq_ftimeleft = 0; } setquota_rslt *setquotainfo(int lflags, caddr_t * argp, struct svc_req *rqstp) { static setquota_rslt result; #if defined(RPC_SETQUOTA) union { setquota_args *args; ext_setquota_args *ext_args; } arguments; struct util_dqblk dqblk; struct dquot *dquot; struct mount_entry *mnt; char pathname[PATH_MAX] = {0}; char *pathp = pathname; int id, qcmd, type; struct quota_handle *handles[2] = { NULL, NULL }; /* * First check authentication. */ if (lflags & TYPE_EXTENDED) { arguments.ext_args = (ext_setquota_args *) argp; id = arguments.ext_args->sqa_id; if (unix_cred->aup_uid != 0) { result.status = Q_EPERM; return (&result); } qcmd = arguments.ext_args->sqa_qcmd; type = arguments.ext_args->sqa_type; if (arguments.ext_args->sqa_pathp[0] != '/') sstrncpy(pathname, nfs_pseudoroot, PATH_MAX); sstrncat(pathname, arguments.ext_args->sqa_pathp, PATH_MAX); servnet2utildqblk(&dqblk, &arguments.ext_args->sqa_dqblk); } else { arguments.args = (setquota_args *) argp; id = arguments.args->sqa_id; if (unix_cred->aup_uid != 0) { result.status = Q_EPERM; return (&result); } qcmd = arguments.args->sqa_qcmd; type = USRQUOTA; if (arguments.args->sqa_pathp[0] != '/') sstrncpy(pathname, nfs_pseudoroot, PATH_MAX); sstrncat(pathname, arguments.args->sqa_pathp, PATH_MAX); servnet2utildqblk(&dqblk, &arguments.args->sqa_dqblk); } result.status = Q_NOQUOTA; result.setquota_rslt_u.sqr_rquota.rq_bsize = RPC_DQBLK_SIZE; if (init_mounts_scan(1, &pathp, MS_QUIET | MS_NO_MNTPOINT | MS_NFS_ALL | ((flags & FL_AUTOFS) ? 0 : MS_NO_AUTOFS)) < 0) goto out; if (!(mnt = get_next_mount())) { end_mounts_scan(); goto out; } if (!(handles[0] = init_io(mnt, type, -1, 0))) { end_mounts_scan(); goto out; } end_mounts_scan(); if (!(dquot = handles[0]->qh_ops->read_dquot(handles[0], id))) goto out; if (qcmd == QCMD(Q_RPC_SETQLIM, type) || qcmd == QCMD(Q_RPC_SETQUOTA, type)) { dquot->dq_dqb.dqb_bsoftlimit = dqblk.dqb_bsoftlimit; dquot->dq_dqb.dqb_bhardlimit = dqblk.dqb_bhardlimit; dquot->dq_dqb.dqb_isoftlimit = dqblk.dqb_isoftlimit; dquot->dq_dqb.dqb_ihardlimit = dqblk.dqb_ihardlimit; dquot->dq_dqb.dqb_btime = dqblk.dqb_btime; dquot->dq_dqb.dqb_itime = dqblk.dqb_itime; } if (qcmd == QCMD(Q_RPC_SETUSE, type) || qcmd == QCMD(Q_RPC_SETQUOTA, type)) { dquot->dq_dqb.dqb_curspace = dqblk.dqb_curspace; dquot->dq_dqb.dqb_curinodes = dqblk.dqb_curinodes; } if (handles[0]->qh_ops->commit_dquot(dquot, COMMIT_LIMITS) == -1) { free(dquot); goto out; } free(dquot); result.status = Q_OK; out: dispose_handle_list(handles); #else result.status = Q_EPERM; #endif return (&result); } getquota_rslt *getquotainfo(int lflags, caddr_t * argp, struct svc_req * rqstp) { static getquota_rslt result; union { getquota_args *args; ext_getquota_args *ext_args; } arguments; struct dquot *dquot = NULL; struct mount_entry *mnt; char pathname[PATH_MAX] = {0}; char *pathp = pathname; int id, type; struct quota_handle *handles[2] = { NULL, NULL }; /* * First check authentication. */ if (lflags & TYPE_EXTENDED) { arguments.ext_args = (ext_getquota_args *) argp; id = arguments.ext_args->gqa_id; type = arguments.ext_args->gqa_type; if (arguments.ext_args->gqa_pathp[0] != '/') sstrncpy(pathname, nfs_pseudoroot, PATH_MAX); sstrncat(pathname, arguments.ext_args->gqa_pathp, PATH_MAX); if (type == USRQUOTA && unix_cred->aup_uid && unix_cred->aup_uid != id) { result.status = Q_EPERM; return (&result); } if (type == GRPQUOTA && unix_cred->aup_uid && unix_cred->aup_gid != id && !in_group((gid_t *) unix_cred->aup_gids, unix_cred->aup_len, id)) { result.status = Q_EPERM; return (&result); } } else { arguments.args = (getquota_args *) argp; id = arguments.args->gqa_uid; type = USRQUOTA; if (arguments.ext_args->gqa_pathp[0] != '/') sstrncpy(pathname, nfs_pseudoroot, PATH_MAX); sstrncat(pathname, arguments.args->gqa_pathp, PATH_MAX); if (unix_cred->aup_uid && unix_cred->aup_uid != id) { result.status = Q_EPERM; return (&result); } } result.status = Q_NOQUOTA; if (init_mounts_scan(1, &pathp, MS_QUIET | MS_NO_MNTPOINT | MS_NFS_ALL | ((flags & FL_AUTOFS) ? 0 : MS_NO_AUTOFS)) < 0) goto out; if (!(mnt = get_next_mount())) { end_mounts_scan(); goto out; } if (!(handles[0] = init_io(mnt, type, -1, IOI_READONLY))) { end_mounts_scan(); goto out; } end_mounts_scan(); if (!(lflags & ACTIVE) || QIO_ENABLED(handles[0])) dquot = handles[0]->qh_ops->read_dquot(handles[0], id); if (dquot) { result.status = Q_OK; result.getquota_rslt_u.gqr_rquota.rq_active = QIO_ENABLED(handles[0]) ? TRUE : FALSE; servutil2netdqblk(&result.getquota_rslt_u.gqr_rquota, &dquot->dq_dqb); free(dquot); } out: dispose_handle_list(handles); return (&result); } /* * Map RPC-entrypoints to local function names. */ getquota_rslt *rquotaproc_getquota_1_svc(getquota_args * argp, struct svc_req * rqstp) { return (getquotainfo(0, (caddr_t *) argp, rqstp)); } getquota_rslt *rquotaproc_getactivequota_1_svc(getquota_args * argp, struct svc_req * rqstp) { return (getquotainfo(ACTIVE, (caddr_t *) argp, rqstp)); } getquota_rslt *rquotaproc_getquota_2_svc(ext_getquota_args * argp, struct svc_req * rqstp) { return (getquotainfo(TYPE_EXTENDED, (caddr_t *) argp, rqstp)); } getquota_rslt *rquotaproc_getactivequota_2_svc(ext_getquota_args * argp, struct svc_req * rqstp) { return (getquotainfo(TYPE_EXTENDED | ACTIVE, (caddr_t *) argp, rqstp)); } setquota_rslt *rquotaproc_setquota_1_svc(setquota_args * argp, struct svc_req * rqstp) { return (setquotainfo(0, (caddr_t *) argp, rqstp)); } setquota_rslt *rquotaproc_setactivequota_1_svc(setquota_args * argp, struct svc_req * rqstp) { return (setquotainfo(ACTIVE, (caddr_t *) argp, rqstp)); } setquota_rslt *rquotaproc_setquota_2_svc(ext_setquota_args * argp, struct svc_req * rqstp) { return (setquotainfo(TYPE_EXTENDED, (caddr_t *) argp, rqstp)); } setquota_rslt *rquotaproc_setactivequota_2_svc(ext_setquota_args * argp, struct svc_req * rqstp) { return (setquotainfo(TYPE_EXTENDED | ACTIVE, (caddr_t *) argp, rqstp)); } ���������������������������������������������������quota-4.09/rquota_svc.c�����������������������������������������������������������������������������0000664�0000000�0000000�00000034735�14463210551�0015146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * QUOTA An implementation of the diskquota system for the LINUX operating * system. QUOTA is implemented using the BSD systemcall interface * as the means of communication with the user level. Should work for * all filesystems because of integration into the VFS layer of the * operating system. This is based on the Melbourne quota system wich * uses both user and group quota files. * * Rquota service handlers. * * Author: Marco van Wieringen <mvw@planets.elm.net> * changes for new utilities by Jan Kara <jack@suse.cz> * patches by Jani Jaakkola <jjaakkol@cs.helsinki.fi> * * 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 <rpc/rpc.h> #include <rpc/rpc_com.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> /* getenv, exit */ #include <string.h> /* strcmp */ #include <memory.h> #include <unistd.h> #include <getopt.h> #include <signal.h> #include <errno.h> #include <netconfig.h> #ifdef HOSTS_ACCESS #include <tcpd.h> #include <netdb.h> int deny_severity, allow_severity; /* Needed by some versions of libwrap */ #endif #ifdef __STDC__ #define SIG_PF void(*)(int) #endif #include "pot.h" #include "common.h" #include "rquota.h" #include "quotasys.h" char *progname; /* * Global authentication credentials. */ struct authunix_parms *unix_cred; #define FL_SETQUOTA 1 /* Enable setquota rpc */ #define FL_NODAEMON 2 /* Disable daemon() call */ #define FL_AUTOFS 4 /* Don't ignore autofs mountpoints */ int flags; /* Options specified on command line */ static int port; /* Port to use (0 for default one) */ static char xtab_path[PATH_MAX]; /* Path to NFSD export table */ char nfs_pseudoroot[PATH_MAX]; /* Root of the virtual NFS filesystem ('/' for NFSv3) */ static struct option options[]= { { "version", 0, NULL, 'V' }, { "help", 0, NULL, 'h' }, { "foreground", 0 , NULL, 'F' }, #ifdef RPC_SETQUOTA { "no-setquota", 0 , NULL, 's' }, { "setquota", 0, NULL, 'S' }, #endif { "autofs", 0, NULL, 'I'}, { "port", 1, NULL, 'p' }, { "xtab", 1, NULL, 'x' }, { NULL, 0, NULL , 0 } }; static void show_help(void) { #ifdef RPC_SETQUOTA errstr(_("Usage: %s [options]\nOptions are:\n\ -h --help shows this text\n\ -V --version shows version information\n\ -F --foreground starts the quota service in foreground\n\ -I --autofs do not ignore mountpoints mounted by automounter\n\ -p --port <port> listen on given port\n\ -s --no-setquota disables remote calls to setquota (default)\n\ -S --setquota enables remote calls to setquota\n\ -x --xtab <path> set an alternative file with NFSD export table\n"), progname); #else errstr(_("Usage: %s [options]\nOptions are:\n\ -h --help shows this text\n\ -V --version shows version information\n\ -F --foreground starts the quota service in foreground\n\ -I --autofs do not ignore mountpoints mounted by automounter\n\ -p --port <port> listen on given port\n\ -x --xtab <path> set an alternative file with NFSD export table\n"), progname); #endif } static void parse_options(int argc, char **argv) { char ostr[128]="", *endptr; int i,opt; int j=0; sstrncpy(xtab_path, NFSD_XTAB_PATH, PATH_MAX); for(i=0; options[i].name; i++) { ostr[j++] = options[i].val; if (options[i].has_arg) ostr[j++] = ':'; } while ((opt=getopt_long(argc, argv, ostr, options, NULL))>=0) { switch(opt) { case 'V': version(); exit(0); case 'h': show_help(); exit(0); case 'F': flags |= FL_NODAEMON; break; #ifdef RPC_SETQUOTA case 's': flags &= ~FL_SETQUOTA; break; case 'S': flags |= FL_SETQUOTA; break; #endif case 'I': flags |= FL_AUTOFS; break; case 'p': port = strtol(optarg, &endptr, 0); if (*endptr || port <= 0) { errstr(_("Illegal port number: %s\n"), optarg); show_help(); exit(1); } break; case 'x': if (access(optarg, R_OK) < 0) { errstr(_("Cannot access the specified xtab file %s: %s\n"), optarg, strerror(errno)); show_help(); exit(1); } sstrncpy(xtab_path, optarg, PATH_MAX); break; default: errstr(_("Unknown option '%c'.\n"), opt); show_help(); exit(1); } } } /* * good_client checks if an quota client should be allowed to * execute the requested rpc call. */ static int good_client(struct svc_req *rqstp) { #ifdef HOSTS_ACCESS struct request_info req; #endif ulong rq_proc = rqstp->rq_proc; struct sockaddr_storage *addr; void *sin_addr; in_port_t sin_port; char remote[128]; addr = (struct sockaddr_storage *)svc_getcaller(rqstp->rq_xprt); if (addr->ss_family == AF_INET) { sin_addr = &((struct sockaddr_in *)addr)->sin_addr; sin_port = ((struct sockaddr_in *)addr)->sin_port; } else if (addr->ss_family == AF_INET6) { sin_addr = &((struct sockaddr_in6 *)addr)->sin6_addr; sin_port = ((struct sockaddr_in6 *)addr)->sin6_port; } else { errstr(_("unknown address family %u for RPC request\n"), (unsigned int)addr->ss_family); return 0; } if (!inet_ntop(addr->ss_family, sin_addr, remote, sizeof(remote))) { errstr(_("failed to translate address for RPC request: %s\n"), strerror(errno)); return 0; } if (rq_proc == RQUOTAPROC_SETQUOTA || rq_proc == RQUOTAPROC_SETACTIVEQUOTA) { /* If setquota is disabled, fail always */ if (!(flags & FL_SETQUOTA)) { errstr(_("host %s attempted to call setquota when disabled\n"), remote); return 0; } /* Require that SETQUOTA calls originate from port < 1024 */ if (ntohs(sin_port) >= 1024) { errstr(_("host %s attempted to call setquota from port >= 1024\n"), remote); return 0; } /* Setquota OK */ } #ifdef HOSTS_ACCESS /* NOTE: we could use different servicename for setquota calls to * allow only some hosts to call setquota. */ request_init(&req, RQ_DAEMON, "rquotad", RQ_CLIENT_SIN, addr, 0); sock_methods(&req); if (hosts_access(&req)) return 1; errstr(_("Denied access to host %s\n"), remote); return 0; #else /* If no access checking is available, OK always */ return 1; #endif } static void rquotaprog_1(struct svc_req *rqstp, register SVCXPRT * transp) { union { getquota_args rquotaproc_getquota_1_arg; setquota_args rquotaproc_setquota_1_arg; getquota_args rquotaproc_getactivequota_1_arg; setquota_args rquotaproc_setactivequota_1_arg; } argument; char *result; xdrproc_t xdr_argument, xdr_result; char *(*local) (char *, struct svc_req *); /* * Authenticate host */ if (!good_client(rqstp)) { svcerr_auth (transp, AUTH_FAILED); return; } /* * Don't bother authentication for NULLPROC. */ if (rqstp->rq_proc == NULLPROC) { (void)svc_sendreply(transp, (xdrproc_t) xdr_void, (char *)NULL); return; } /* * Get authentication. */ switch (rqstp->rq_cred.oa_flavor) { case AUTH_UNIX: unix_cred = (struct authunix_parms *)rqstp->rq_clntcred; break; case AUTH_NULL: default: svcerr_weakauth(transp); return; } switch (rqstp->rq_proc) { case RQUOTAPROC_GETQUOTA: xdr_argument = (xdrproc_t) xdr_getquota_args; xdr_result = (xdrproc_t) xdr_getquota_rslt; local = (char *(*)(char *, struct svc_req *))rquotaproc_getquota_1_svc; break; case RQUOTAPROC_SETQUOTA: xdr_argument = (xdrproc_t) xdr_setquota_args; xdr_result = (xdrproc_t) xdr_setquota_rslt; local = (char *(*)(char *, struct svc_req *))rquotaproc_setquota_1_svc; break; case RQUOTAPROC_GETACTIVEQUOTA: xdr_argument = (xdrproc_t) xdr_getquota_args; xdr_result = (xdrproc_t) xdr_getquota_rslt; local = (char *(*)(char *, struct svc_req *))rquotaproc_getactivequota_1_svc; break; case RQUOTAPROC_SETACTIVEQUOTA: xdr_argument = (xdrproc_t) xdr_setquota_args; xdr_result = (xdrproc_t) xdr_setquota_rslt; local = (char *(*)(char *, struct svc_req *))rquotaproc_setactivequota_1_svc; break; default: svcerr_noproc(transp); return; } memset(&argument, 0, sizeof(argument)); if (!svc_getargs(transp, xdr_argument, (caddr_t) & argument)) { svcerr_decode(transp); return; } result = (*local) ((char *)&argument, rqstp); if (result != NULL && !svc_sendreply(transp, xdr_result, result)) { svcerr_systemerr(transp); } if (!svc_freeargs(transp, xdr_argument, (caddr_t) & argument)) { errstr(_("unable to free arguments\n")); exit(1); } return; } static void rquotaprog_2(struct svc_req *rqstp, register SVCXPRT * transp) { union { ext_getquota_args rquotaproc_getquota_2_arg; ext_setquota_args rquotaproc_setquota_2_arg; ext_getquota_args rquotaproc_getactivequota_2_arg; ext_setquota_args rquotaproc_setactivequota_2_arg; } argument; char *result; xdrproc_t xdr_argument, xdr_result; char *(*local) (char *, struct svc_req *); /* * Authenticate host */ if (!good_client(rqstp)) { svcerr_auth (transp, AUTH_FAILED); return; } /* * Don't bother authentication for NULLPROC. */ if (rqstp->rq_proc == NULLPROC) { (void)svc_sendreply(transp, (xdrproc_t) xdr_void, (char *)NULL); return; } /* * Get authentication. */ switch (rqstp->rq_cred.oa_flavor) { case AUTH_UNIX: unix_cred = (struct authunix_parms *)rqstp->rq_clntcred; break; case AUTH_NULL: default: svcerr_weakauth(transp); return; } switch (rqstp->rq_proc) { case RQUOTAPROC_GETQUOTA: xdr_argument = (xdrproc_t) xdr_ext_getquota_args; xdr_result = (xdrproc_t) xdr_getquota_rslt; local = (char *(*)(char *, struct svc_req *))rquotaproc_getquota_2_svc; break; case RQUOTAPROC_SETQUOTA: xdr_argument = (xdrproc_t) xdr_ext_setquota_args; xdr_result = (xdrproc_t) xdr_setquota_rslt; local = (char *(*)(char *, struct svc_req *))rquotaproc_setquota_2_svc; break; case RQUOTAPROC_GETACTIVEQUOTA: xdr_argument = (xdrproc_t) xdr_ext_getquota_args; xdr_result = (xdrproc_t) xdr_getquota_rslt; local = (char *(*)(char *, struct svc_req *))rquotaproc_getactivequota_2_svc; break; case RQUOTAPROC_SETACTIVEQUOTA: xdr_argument = (xdrproc_t) xdr_ext_setquota_args; xdr_result = (xdrproc_t) xdr_setquota_rslt; local = (char *(*)(char *, struct svc_req *))rquotaproc_setactivequota_2_svc; break; default: svcerr_noproc(transp); return; } memset(&argument, 0, sizeof(argument)); if (!svc_getargs(transp, xdr_argument, (caddr_t) & argument)) { svcerr_decode(transp); return; } result = (*local) ((char *)&argument, rqstp); if (result != NULL && !svc_sendreply(transp, xdr_result, result)) { svcerr_systemerr(transp); } if (!svc_freeargs(transp, xdr_argument, (caddr_t) & argument)) { errstr(_("unable to free arguments\n")); exit(1); } return; } static void unregister (int sig) { rpcb_unset(RQUOTAPROG, RQUOTAVERS, NULL); rpcb_unset(RQUOTAPROG, EXT_RQUOTAVERS, NULL); exit(0); } /* Parse NFSD export table and find a filesystem pseudoroot if it is there */ static void get_pseudoroot(void) { FILE *f; char exp_line[1024]; char *c; strcpy(nfs_pseudoroot, "/"); if (!(f = fopen(xtab_path, "r"))) { errstr(_("Warning: Cannot open export table %s: %s\nUsing '/' as a pseudofilesystem root.\n"), xtab_path, strerror(errno)); return; } while (fgets(exp_line, sizeof(exp_line), f)) { if (exp_line[0] == '#' || exp_line[0] == '\n') /* Comment, empty line? */ continue; c = strchr(exp_line, '\t'); if (!c) /* Huh, line we don't understand... */ continue; *c = 0; /* Find the beginning of export options */ c = strchr(c+1, '('); if (!c) continue; c = strstr(c, "fsid=0"); if (c) { sstrncpy(nfs_pseudoroot, exp_line, PATH_MAX); sstrncat(nfs_pseudoroot, "/", PATH_MAX); break; } } fclose(f); } extern SVCXPRT *svc_create_nconf(rpcprog_t program, struct netconfig *nconf, int port); static void rquota_svc_create(int port) { int maxrec = RPC_MAXDATASIZE; void *handlep; int visible = 0; struct netconfig *nconf; SVCXPRT *xprt; /* * Setting MAXREC also enables non-blocking mode for tcp connections. * This avoids DOS attacks by a client sending many requests but never * reading the reply: * - if a second request already is present for reading in the socket, * after the first request just was read, libtirpc will break the * connection. Thus an attacker can't simply send requests as fast as * he can without waiting for the response. * - if the write buffer of the socket is full, the next write() will * fail with EAGAIN. libtirpc will retry the write in a loop for max. * 2 seconds. If write still fails, the connection will be closed. */ rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec); handlep = setnetconfig(); if (!handlep) { errstr(_("Failed to access local netconfig database: %s\n"), nc_sperror()); exit(1); } while ((nconf = getnetconfig(handlep)) != NULL) { if (!(nconf->nc_flag & NC_VISIBLE)) continue; xprt = svc_create_nconf(RQUOTAPROG, nconf, port); if (!xprt) { errstr(_("Failed to create %s service.\n"), nconf->nc_netid); exit(1); } if (!svc_reg(xprt, RQUOTAPROG, RQUOTAVERS, rquotaprog_1, nconf)) { errstr(_("Unable to register (RQUOTAPROG, RQUOTAVERS, %s).\n"), nconf->nc_netid); } else { visible++; } if (!svc_reg(xprt, RQUOTAPROG, EXT_RQUOTAVERS, rquotaprog_2, nconf)) { errstr(_("Unable to register (RQUOTAPROG, EXT_RQUOTAVERS, %s).\n"), nconf->nc_netid); } else { visible++; } } if (visible == 0) { errstr("Failed to register any service.\n"); exit(1); } endnetconfig(handlep); } int main(int argc, char **argv) { struct sigaction sa; gettexton(); progname = basename(argv[0]); parse_options(argc, argv); init_kernel_interface(); get_pseudoroot(); rpcb_unset(RQUOTAPROG, RQUOTAVERS, NULL); rpcb_unset(RQUOTAPROG, EXT_RQUOTAVERS, NULL); sa.sa_handler = SIG_IGN; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sigaction(SIGCHLD, &sa, NULL); sa.sa_handler = unregister; sigaction(SIGHUP, &sa, NULL); sigaction(SIGINT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); rquota_svc_create(port); if (!(flags & FL_NODAEMON)) { use_syslog(); if (daemon(0, 0) < 0) { errstr(_("Failed to daemonize: %s\n"), strerror(errno)); exit(1); } } svc_run(); errstr(_("svc_run returned\n")); exit(1); /* NOTREACHED */ } �����������������������������������quota-4.09/set_limits_example.c���������������������������������������������������������������������0000664�0000000�0000000�00000002542�14463210551�0016636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "config.h" #include <sys/types.h> #include <sys/quota.h> #include <errno.h> #include <stdio.h> #include "pot.h" static int copy_user_quota_limits(const char *block_device, uid_t from, uid_t to) { struct dqblk dq; if (quotactl(QCMD(Q_GETQUOTA, USRQUOTA), block_device, from, (caddr_t) & dq) == 0) { if (quotactl(QCMD(Q_SETQLIM, USRQUOTA), block_device, to, (caddr_t) & dq) == 0) { return (0); } else { errstr( _("copy_user_quota_limits: Failed to set userquota for uid %ld : %s\n"), to, strerror(errno)); return (1); } } else { errstr( _("copy_user_quota_limits: Failed to get userquota for uid %ld : %s\n"), from, strerror(errno)); return (1); } } tatic int copy_group_quota_limits(const char *block_device, gid_t from, gid_t to) { struct dqblk dq; if (quotactl(QCMD(Q_GETQUOTA, GRPQUOTA), block_device, from, (caddr_t) & dq) == 0) { if (quotactl(QCMD(Q_SETQLIM, GRPQUOTA), block_device, to, (caddr_t) & dq) == 0) { return (0); } else { errstr( _("copy_group_quota_limits: Failed to set groupquota for gid %ld : %s\n"), to, strerror(errno)); return (1); } } else { errstr( _("copy_group_quota_limits: Failed to get groupquota for gid %ld : %s\n"), from, strerror(errno)); return (1); } } main(int argc, char **argv) { gettexton(); copy_user_quota_limits("/dev/hda8", 152, 151); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/setquota.8�������������������������������������������������������������������������������0000664�0000000�0000000�00000011247�14463210551�0014543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH SETQUOTA 8 .SH NAME setquota \- set disk quotas .SH SYNOPSIS .B setquota [ .B \-rm ] [ .B \-u | .B \-g | .B \-P ] [ .B \-F .I quotaformat ] .I name .I block-softlimit .I block-hardlimit .I inode-softlimit .I inode-hardlimit .B \-a | .I filesystem... .LP .B setquota [ .B \-rm ] [ .B \-u | .B \-g | .B \-P ] [ .B \-F .I quotaformat ] [ .B \-p .I protoname ] .I name .B \-a | .I filesystem... .LP .B setquota .B \-b [ .B \-rm ] [ .B \-u | .B \-g | .B \-P ] [ .B \-F .I quotaformat ] .B \-a | .I filesystem... .LP .B setquota .B \-t [ .B \-u | .B \-g | .B \-P ] [ .B \-F .I quotaformat ] .I block-grace .I inode-grace .B \-a | .I filesystem... .LP .B setquota .B \-T [ .B \-u | .B \-g | .B \-P ] [ .B \-F .I quotaformat ] .I name .I block-grace .I inode-grace .B \-a | .I filesystem... .SH DESCRIPTION .IX "setquota command" "" "\fLsetquota\fP \(em set disk quotas" .IX set "disk quotas \(em \fLsetquota\fP" .IX "disk quotas" "setquota command" "" "\fLsetquota\fP \(em set disk quotas" .IX "disk quotas" "setquota command" "" "\fLsetquota\fP \(em set disk quotas" .IX "quotas" "setquota command" "" "\fLsetquota\fP \(em set disk quotas" .IX "filesystem" "setquota command" "" "\fLsetquota\fP \(em set disk quotas" .B setquota is a command line quota editor. The filesystem, user/group/project name and new quotas for this filesystem can be specified on the command line. Note that if a number is given in the place of a user/group/project name it is treated as an UID/GID/project ID. .TP .B -r, --remote Edit also remote quota use rpc.rquotad on remote server to set quota. This option is available only if quota tools were compiled with enabled support for setting quotas over RPC. .TP .B -m, --no-mixed-pathnames Currently, pathnames of NFSv4 mountpoints are sent without leading slash in the path. .BR rpc.rquotad uses this to recognize NFSv4 mounts and properly prepend pseudoroot of NFS filesystem to the path. If you specify this option, .BR setquota will always send paths with a leading slash. This can be useful for legacy reasons but be aware that quota over RPC will stop working if you are using new .BR rpc.rquotad . .TP .B -F, --format=\f2quotaformat\f1 Perform setting for specified format (ie. don't perform format autodetection). Possible format names are: .B vfsold Original quota format with 16-bit UIDs / GIDs, .B vfsv0 Quota format with 32-bit UIDs / GIDs, 64-bit space usage, 32-bit inode usage and limits, .B vfsv1 Quota format with 64-bit quota limits and usage, .B rpc (quota over NFS), .B xfs (quota on XFS filesystem) .TP .B -u, --user Set user quotas for named user. This is the default. .TP .B -g, --group Set group quotas for named group. .TP .B -P, --project Set project quotas for named project. .TP .B -p, --prototype=\f2protoname\f1 Use quota settings of user, group or project .I protoname to set the quota for the named user, group or project. .TP .B --always-resolve Always try to translate user / group / project name to uid / gid / project ID even if the name is composed of digits only. .TP .B -b, --batch Read information to set from stdin (input format is .I name block-softlimit block-hardlimit inode-softlimit inode-hardlimit ). Empty lines and lines starting with # are ignored. .TP .B -c, --continue-batch If parsing of an input line in batch mode fails, continue with processing the next line. .TP .B -t, --edit-period Set grace times for users/groups/projects. Times .B block-grace and .B inode-grace are specified in seconds. .TP .B -T, --edit-times Alter times for individual user/group/project when softlimit is enforced. Times .B block-grace and .B inode-grace are specified in seconds or can be string 'unset'. .TP .B -a, --all Go through all filesystems with quota in .B /etc/mtab and perform setting. .PP .I block-softlimit and .I block-hardlimit are interpreted as multiples of kibibyte (1024 bytes) blocks by default. Symbols K, M, G, and T can be appended to numeric value to express kibibytes, mebibytes, gibibytes, and tebibytes. .PP .I inode-softlimit and .I inode-hardlimit are interpreted literally. Symbols k, m, g, and t can be appended to numeric value to express multiples of 10^3, 10^6, 10^9, and 10^12 inodes. .PP To disable a quota, set the corresponding parameter to 0. To change quotas for several filesystems, invoke once for each filesystem. .PP Only the super-user may edit quotas. .SH FILES .PD 0 .TP 20 .B aquota.user or aquota.group quota file at the filesystem root (version 2 quota, non-XFS filesystems) .TP .B quota.user or quota.group quota file at the filesystem root (version 1 quota, non-XFS filesystems) .TP .B /etc/mtab mounted filesystem table .PD .SH SEE ALSO .BR edquota (8), .BR quota (1), .BR quotactl (2), .BR quotacheck (8), .BR quotaon (8), .BR repquota (8) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/setquota.c�������������������������������������������������������������������������������0000664�0000000�0000000�00000035440�14463210551�0014617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Set disk quota from command line * * Jan Kara <jack@suse.cz> - sponsored by SuSE CR */ #include "config.h" #if defined(RPC) #include <rpc/rpc.h> #endif #include <sys/types.h> #include <errno.h> #include <stdio.h> #include <string.h> #include <getopt.h> #include <time.h> #include <ctype.h> #include <stdlib.h> #if defined(RPC) #include "rquota.h" #include "rquota_client.h" #endif #include "pot.h" #include "quotaops.h" #include "common.h" #include "quotasys.h" #define FL_USER 1 #define FL_GROUP 2 #define FL_RPC 4 #define FL_ALL 8 #define FL_PROTO 16 #define FL_GRACE 32 #define FL_INDIVIDUAL_GRACE 64 #define FL_BATCH 128 #define FL_NUMNAMES 256 #define FL_NO_MIXED_PATHS 512 #define FL_CONTINUE_BATCH 1024 #define FL_PROJECT 2048 static int flags, fmt = -1; static char **mnt; char *progname; static int mntcnt; static qid_t protoid, id; static struct util_dqblk toset; /* Print usage information */ static void usage(void) { #if defined(RPC_SETQUOTA) char *ropt = "[-rm] "; #else char *ropt = ""; #endif errstr(_("Usage:\n\ setquota [-u|-g|-P] %1$s[-F quotaformat] <user|group|project>\n\ \t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|<filesystem>...\n\ setquota [-u|-g|-P] %1$s[-F quotaformat] <-p protouser|protogroup|protoproject> <user|group|project> -a|<filesystem>...\n\ setquota [-u|-g|-P] %1$s[-F quotaformat] -b [-c] -a|<filesystem>...\n\ setquota [-u|-g|-P] [-F quotaformat] -t <blockgrace> <inodegrace> -a|<filesystem>...\n\ setquota [-u|-g|-P] [-F quotaformat] <user|group|project> -T <blockgrace> <inodegrace> -a|<filesystem>...\n\n\ -u, --user set limits for user\n\ -g, --group set limits for group\n\ -P, --project set limits for project\n\ -a, --all set limits for all filesystems\n\ --always-resolve always try to resolve name, even if is\n\ composed only of digits\n\ -F, --format=formatname operate on specific quota format\n\ -p, --prototype=protoname copy limits from user/group/project\n\ -b, --batch read limits from standard input\n\ -c, --continue-batch continue in input processing in case of an error\n"), ropt); #if defined(RPC_SETQUOTA) fputs(_("-r, --remote set remote quota (via RPC)\n\ -m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n"), stderr); #endif fputs(_("-t, --edit-period edit grace period\n\ -T, --edit-times edit grace times for user/group/project\n\ -h, --help display this help text and exit\n\ -V, --version display version information and exit\n\n"), stderr); fprintf(stderr, _("Bugs to: %s\n"), PACKAGE_BUGREPORT); exit(1); } /* Convert string to number - print errstr message in case of failure */ static qsize_t parse_unum(char *str, char *msg) { char *errch; qsize_t ret = strtoull(str, &errch, 0); if (*errch) { errstr(_("%s: %s\n"), msg, str); usage(); } return ret; } /* Convert block size to number - print errstr message in case of failure */ static qsize_t parse_blocksize(const char *str, const char *msg) { qsize_t ret; const char *error = str2space(str, &ret); if (error) { errstr(_("%s: %s: %s\n"), msg, str, error); usage(); } return ret; } /* Convert inode count to number - print errstr message in case of failure */ static qsize_t parse_inodecount(const char *str, const char *msg) { qsize_t ret; const char *error = str2number(str, &ret); if (error) { errstr(_("%s: %s: %s\n"), msg, str, error); usage(); } return ret; } /* Convert our flags to quota type */ static inline int flag2type(int flags) { if (flags & FL_USER) return USRQUOTA; if (flags & FL_GROUP) return GRPQUOTA; if (flags & FL_PROJECT) return PRJQUOTA; return -1; } /* Parse options of setquota */ static void parse_options(int argcnt, char **argstr) { int ret, otherargs; char *protoname = NULL; int type = 0; #ifdef RPC_SETQUOTA char *opts = "ghp:uPrmVF:taTbc"; #else char *opts = "ghp:uPVF:taTbc"; #endif struct option long_opts[] = { { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "project", 0, NULL, 'P' }, { "prototype", 1, NULL, 'p' }, #ifdef RPC_SETQUOTA { "remote", 0, NULL, 'r' }, { "no-mixed-pathnames", 0, NULL, 'm' }, #endif { "all", 0, NULL, 'a' }, { "always-resolve", 0, NULL, 256}, { "edit-period", 0, NULL, 't' }, { "edit-times", 0, NULL, 'T' }, { "batch", 0, NULL, 'b' }, { "continue", 0, NULL, 'c' }, { "format", 1, NULL, 'F' }, { "version", 0, NULL, 'V' }, { "help", 0, NULL, 'h' }, { NULL, 0, NULL, 0 } }; while ((ret = getopt_long(argcnt, argstr, opts, long_opts, NULL)) != -1) { switch (ret) { case '?': case 'h': usage(); case 'g': flags |= FL_GROUP; break; case 'u': flags |= FL_USER; break; case 'P': flags |= FL_PROJECT; break; case 'p': flags |= FL_PROTO; protoname = optarg; break; case 'r': flags |= FL_RPC; break; case 'm': flags |= FL_NO_MIXED_PATHS; break; case 'a': flags |= FL_ALL; break; case 256: flags |= FL_NUMNAMES; break; case 't': flags |= FL_GRACE; break; case 'b': flags |= FL_BATCH; break; case 'c': flags |= FL_CONTINUE_BATCH; break; case 'T': flags |= FL_INDIVIDUAL_GRACE; break; case 'F': if ((fmt = name2fmt(optarg)) == QF_ERROR) exit(1); break; case 'V': version(); exit(0); } } if (flags & FL_USER) type++; if (flags & FL_GROUP) type++; if (flags & FL_PROJECT) type++; if (type > 1) { errstr(_("Group/user/project quotas cannot be used together.\n")); usage(); } if (flags & FL_PROTO && flags & FL_GRACE) { errstr(_("Prototype user has no sense when editing grace times.\n")); usage(); } if (flags & FL_INDIVIDUAL_GRACE && flags & FL_GRACE) { errstr(_("Cannot set both individual and global grace time.\n")); usage(); } if (flags & FL_BATCH && flags & (FL_GRACE | FL_INDIVIDUAL_GRACE)) { errstr(_("Batch mode cannot be used for setting grace times.\n")); usage(); } if (flags & FL_BATCH && flags & FL_PROTO) { errstr(_("Batch mode and prototype user cannot be used together.\n")); usage(); } if (flags & FL_RPC && (flags & (FL_GRACE | FL_INDIVIDUAL_GRACE))) { errstr(_("Cannot set grace times over RPC protocol.\n")); usage(); } if (flags & FL_GRACE) otherargs = 2; else if (flags & FL_INDIVIDUAL_GRACE) otherargs = 3; else if (flags & FL_BATCH) otherargs = 0; else { otherargs = 1; if (!(flags & FL_PROTO)) otherargs += 4; } if (optind + otherargs > argcnt) { errstr(_("Bad number of arguments.\n")); usage(); } if (!(flags & (FL_USER | FL_GROUP | FL_PROJECT))) flags |= FL_USER; if (!(flags & (FL_GRACE | FL_BATCH))) { id = name2id(argstr[optind++], flag2type(flags), !!(flags & FL_NUMNAMES), NULL); if (!(flags & (FL_GRACE | FL_INDIVIDUAL_GRACE | FL_PROTO))) { toset.dqb_bsoftlimit = parse_blocksize(argstr[optind++], _("Bad block softlimit")); toset.dqb_bhardlimit = parse_blocksize(argstr[optind++], _("Bad block hardlimit")); toset.dqb_isoftlimit = parse_inodecount(argstr[optind++], _("Bad inode softlimit")); toset.dqb_ihardlimit = parse_inodecount(argstr[optind++], _("Bad inode hardlimit")); } else if (flags & FL_PROTO) protoid = name2id(protoname, flag2type(flags), !!(flags & FL_NUMNAMES), NULL); } if (flags & FL_GRACE) { toset.dqb_btime = parse_unum(argstr[optind++], _("Bad block grace time")); toset.dqb_itime = parse_unum(argstr[optind++], _("Bad inode grace time")); } else if (flags & FL_INDIVIDUAL_GRACE) { time_t now; time(&now); if (!strcmp(argstr[optind], _("unset"))) { toset.dqb_btime = 0; optind++; } else toset.dqb_btime = now + parse_unum(argstr[optind++], _("Bad block grace time")); if (!strcmp(argstr[optind], _("unset"))) { toset.dqb_itime = 0; optind++; } else toset.dqb_itime = now + parse_unum(argstr[optind++], _("Bad inode grace time")); } if (!(flags & FL_ALL)) { mntcnt = argcnt - optind; mnt = argstr + optind; if (!mntcnt) { errstr(_("Mountpoint not specified.\n")); usage(); } } } /* Set user limits */ static int setlimits(struct quota_handle **handles) { struct dquot *q, *protoq, *protoprivs = NULL, *curprivs; int ret = 0; curprivs = getprivs(id, handles, !!(flags & FL_ALL)); if (!curprivs) { errstr(_("Error getting quota information to update.\n")); return -1; } if (flags & FL_PROTO) { protoprivs = getprivs(protoid, handles, 0); if (!protoprivs) { errstr(_("Error getting prototype quota information.\n")); ret = -1; goto out; } for (q = curprivs, protoq = protoprivs; q && protoq; q = q->dq_next, protoq = protoq->dq_next) { q->dq_dqb.dqb_bsoftlimit = protoq->dq_dqb.dqb_bsoftlimit; q->dq_dqb.dqb_bhardlimit = protoq->dq_dqb.dqb_bhardlimit; q->dq_dqb.dqb_isoftlimit = protoq->dq_dqb.dqb_isoftlimit; q->dq_dqb.dqb_ihardlimit = protoq->dq_dqb.dqb_ihardlimit; update_grace_times(q); } freeprivs(protoprivs); } else { for (q = curprivs; q; q = q->dq_next) { q->dq_dqb.dqb_bsoftlimit = toset.dqb_bsoftlimit; q->dq_dqb.dqb_bhardlimit = toset.dqb_bhardlimit; q->dq_dqb.dqb_isoftlimit = toset.dqb_isoftlimit; q->dq_dqb.dqb_ihardlimit = toset.dqb_ihardlimit; update_grace_times(q); } } if (putprivs(curprivs, COMMIT_LIMITS) == -1) ret = -1; out: freeprivs(curprivs); return ret; } #define MAXLINELEN 65536 /* Read & parse one batch entry */ static int read_entry(qid_t *id, qsize_t *isoftlimit, qsize_t *ihardlimit, qsize_t *bsoftlimit, qsize_t *bhardlimit) { static int line = 0; char name[MAXNAMELEN+1]; char linebuf[MAXLINELEN], *chptr; char is[MAXNAMELEN+1], ih[MAXNAMELEN+1]; char bs[MAXNAMELEN+1], bh[MAXNAMELEN+1]; const char *error; int ret; while (1) { line++; if (!fgets(linebuf, sizeof(linebuf), stdin)) return -1; if (linebuf[strlen(linebuf)-1] != '\n') die(1, _("Line %d too long.\n"), line); /* Comment? */ if (linebuf[0] == '#') continue; /* Blank line? */ chptr = linebuf; while (isblank(*chptr)) chptr++; if (*chptr == '\n') continue; ret = sscanf(chptr, "%s %s %s %s %s", name, bs, bh, is, ih); if (ret != 5) { errstr(_("Cannot parse input line %d.\n"), line); if (!(flags & FL_CONTINUE_BATCH)) die(1, _("Exitting.\n")); errstr(_("Skipping line.\n")); continue; } *id = name2id(name, flag2type(flags), !!(flags & FL_NUMNAMES), &ret); if (ret) { errstr(_("Unable to resolve name '%s' on line %d.\n"), name, line); if (!(flags & FL_CONTINUE_BATCH)) die(1, _("Exitting.\n")); errstr(_("Skipping line.\n")); continue; } error = str2space(bs, bsoftlimit); if (error) { errstr(_("Unable to parse block soft limit '%s' " "on line %d: %s\n"), bs, line, error); if (!(flags & FL_CONTINUE_BATCH)) die(1, _("Exitting.\n")); errstr(_("Skipping line.\n")); continue; } error = str2space(bh, bhardlimit); if (error) { errstr(_("Unable to parse block hard limit '%s' " "on line %d: %s\n"), bh, line, error); if (!(flags & FL_CONTINUE_BATCH)) die(1, _("Exitting.\n")); errstr(_("Skipping line.\n")); continue; } error = str2number(is, isoftlimit); if (error) { errstr(_("Unable to parse inode soft limit '%s' " "on line %d: %s\n"), is, line, error); if (!(flags & FL_CONTINUE_BATCH)) die(1, _("Exitting.\n")); errstr(_("Skipping line.\n")); continue; } error = str2number(ih, ihardlimit); if (error) { errstr(_("Unable to parse inode hard limit '%s' " "on line %d: %s\n"), ih, line, error); if (!(flags & FL_CONTINUE_BATCH)) die(1, _("Exitting.\n")); errstr(_("Skipping line.\n")); continue; } break; } return 0; } /* Set user limits in batch mode */ static int batch_setlimits(struct quota_handle **handles) { struct dquot *curprivs, *q; qsize_t bhardlimit, bsoftlimit, ihardlimit, isoftlimit; qid_t id; int ret = 0; while (!read_entry(&id, &isoftlimit, &ihardlimit, &bsoftlimit, &bhardlimit)) { curprivs = getprivs(id, handles, !!(flags & FL_ALL)); if (!curprivs) { errstr(_("Error getting quota information to update.\n")); return -1; } for (q = curprivs; q; q = q->dq_next) { q->dq_dqb.dqb_bsoftlimit = bsoftlimit; q->dq_dqb.dqb_bhardlimit = bhardlimit; q->dq_dqb.dqb_isoftlimit = isoftlimit; q->dq_dqb.dqb_ihardlimit = ihardlimit; update_grace_times(q); } if (putprivs(curprivs, COMMIT_LIMITS) == -1) ret = -1; freeprivs(curprivs); } return ret; } /* Set grace times */ static int setgraces(struct quota_handle **handles) { int i, ret = 0; for (i = 0; handles[i]; i++) { if (!handles[i]->qh_ops->write_info) { errstr(_("Setting grace period on %s is not supported.\n"), handles[i]->qh_quotadev); ret = -1; continue; } handles[i]->qh_info.dqi_bgrace = toset.dqb_btime; handles[i]->qh_info.dqi_igrace = toset.dqb_itime; mark_quotafile_info_dirty(handles[i]); } return ret; } /* Set grace times for individual user */ static int setindivgraces(struct quota_handle **handles) { int ret = 0; struct dquot *q, *curprivs; curprivs = getprivs(id, handles, !!(flags & FL_ALL)); if (!curprivs) { errstr(_("Error getting quota information to update.\n")); return -1; } for (q = curprivs; q; q = q->dq_next) { if (q->dq_dqb.dqb_bsoftlimit && toqb(q->dq_dqb.dqb_curspace) > q->dq_dqb.dqb_bsoftlimit) q->dq_dqb.dqb_btime = toset.dqb_btime; else errstr(_("Not setting block grace time on %s because softlimit is not exceeded.\n"), q->dq_h->qh_quotadev); if (q->dq_dqb.dqb_isoftlimit && q->dq_dqb.dqb_curinodes > q->dq_dqb.dqb_isoftlimit) q->dq_dqb.dqb_itime = toset.dqb_itime; else errstr(_("Not setting inode grace time on %s because softlimit is not exceeded.\n"), q->dq_h->qh_quotadev); } if (putprivs(curprivs, COMMIT_TIMES) == -1) { int type; if (flags & FL_USER) type = USRQUOTA; else if (flags & FL_GROUP) type = GRPQUOTA; else type = PRJQUOTA; errstr(_("cannot write times for %s. Maybe kernel does not support such operation?\n"), _(type2name(type))); ret = -1; } freeprivs(curprivs); return ret; } int main(int argc, char **argv) { struct quota_handle **handles; int ret; gettexton(); progname = basename(argv[0]); parse_options(argc, argv); init_kernel_interface(); if (flags & FL_ALL) handles = create_handle_list(0, NULL, flag2type(flags), fmt, (flags & FL_NO_MIXED_PATHS) ? 0 : IOI_NFS_MIXED_PATHS, (flags & FL_RPC) ? 0 : MS_LOCALONLY); else handles = create_handle_list(mntcnt, mnt, flag2type(flags), fmt, (flags & FL_NO_MIXED_PATHS) ? 0 : IOI_NFS_MIXED_PATHS, (flags & FL_RPC) ? 0 : MS_LOCALONLY); if (flags & FL_GRACE) ret = setgraces(handles); else if (flags & FL_INDIVIDUAL_GRACE) ret = setindivgraces(handles); else if (flags & FL_BATCH) ret = batch_setlimits(handles); else ret = setlimits(handles); if (dispose_handle_list(handles) == -1) ret = -1; return ret ? 1 : 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/svc_socket.c�����������������������������������������������������������������������������0000664�0000000�0000000�00000010747�14463210551�0015120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "config.h" #include <stdio.h> #include <string.h> #include <unistd.h> #include <netdb.h> #include <errno.h> #include <rpc/rpc.h> #include <sys/socket.h> #include "common.h" #include "pot.h" static int get_service_port(u_long number, const char *proto) { char servdata [1024]; struct rpcent *rpcp = NULL; struct servent servbuf, *servp = NULL; int ret; rpcp = getrpcbynumber(number); if (rpcp != NULL) { /* First try name */ ret = getservbyname_r(rpcp->r_name, proto, &servbuf, servdata, sizeof servdata, &servp); if ((ret != 0 || servp == NULL) && rpcp->r_aliases) { const char **a; /* Then we try aliases. */ for (a = (const char **) rpcp->r_aliases; *a != NULL; a++) { ret = getservbyname_r(*a, proto, &servbuf, servdata, sizeof servdata, &servp); if (ret == 0 && servp != NULL) break; } } if (ret == 0 && servp != NULL) return ntohs(servp->s_port); } return 0; } static struct addrinfo *svc_create_bindaddr(struct netconfig *nconf, int port) { struct addrinfo *ai = NULL; struct addrinfo hint = { .ai_flags = AI_PASSIVE | AI_NUMERICSERV, }; char portbuf[16]; int err; if (!strcmp(nconf->nc_protofmly, NC_INET)) hint.ai_family = AF_INET; else if (!strcmp(nconf->nc_protofmly, NC_INET6)) hint.ai_family = AF_INET6; else { errstr(_("Unrecognized bind address family: %s\n"), nconf->nc_protofmly); return NULL; } if (!strcmp(nconf->nc_proto, NC_UDP)) hint.ai_protocol = IPPROTO_UDP; else if (!strcmp(nconf->nc_proto, NC_TCP)) hint.ai_protocol = IPPROTO_TCP; else { errstr(_("Unrecognized bind address protocol: %s\n"), nconf->nc_proto); return NULL; } if (nconf->nc_semantics == NC_TPI_CLTS) hint.ai_socktype = SOCK_DGRAM; else if (nconf->nc_semantics == NC_TPI_COTS_ORD) hint.ai_socktype = SOCK_STREAM; else { errstr(_("Unrecognized address semantics: %lu\n"), nconf->nc_semantics); return NULL; } snprintf(portbuf, sizeof(portbuf), "%u", port); err = getaddrinfo(NULL, portbuf, &hint, &ai); if (err) { errstr(_("Failed to construct bind address: %s\n"), gai_strerror(err)); return NULL; } return ai; } static int svc_create_sock(struct addrinfo *ai) { int fd; int optval = 1; fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (fd < 0) { errstr(_("Error creating socket: %s\n"), strerror(errno)); return -1; } if (ai->ai_family == AF_INET6) { if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &optval, sizeof(optval)) < 0) { errstr(_("Cannot set IPv6 socket options: %s\n"), strerror(errno)); close(fd); return -1; } } if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) { errstr(_("Cannot set socket options: %s\n"), strerror(errno)); close(fd); return -1; } if (bind(fd, ai->ai_addr, ai->ai_addrlen) < 0) { errstr(_("Cannot bind to address: %s\n"), strerror(errno)); close(fd); return -1; } if (ai->ai_protocol == IPPROTO_TCP) { if (listen(fd, SOMAXCONN) < 0) { errstr(_("Cannot listen to address: %s\n"), strerror(errno)); close(fd); return -1; } } return fd; } /* * Create service structure based on passed netconfig and port */ SVCXPRT *svc_create_nconf(rpcprog_t program, struct netconfig *nconf, int port) { SVCXPRT *xprt; if (!port) port = get_service_port(program, nconf->nc_proto); if (port) { struct addrinfo *ai = svc_create_bindaddr(nconf, port); int fd; if (!ai) return NULL; fd = svc_create_sock(ai); freeaddrinfo(ai); if (fd < 0) return NULL; xprt = svc_tli_create(fd, nconf, NULL, 0, 0); if (!xprt) { close(fd); return NULL; } } else { xprt = svc_tli_create(RPC_ANYFD, nconf, NULL, 0, 0); } return xprt; } �������������������������quota-4.09/warnquota.8������������������������������������������������������������������������������0000664�0000000�0000000�00000005425�14463210551�0014720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH WARNQUOTA 8 .SH NAME warnquota \- send mail to users over quota .SH SYNOPSIS .B warnquota [ .B \-ugsid ] [ .B \-F .I quotaformat ] [ .B \-q .I quotatab ] [ .B \-c .I configfile ] [ .B \-a .I adminsfile ] [ .IR filesystem ... ] .SH DESCRIPTION .B warnquota checks the disk quota for specified local filesystems (or for each local filesystem if none specified) and mails a warning message to those users who have reached their softlimit. It is typically run via .BR cron (8). .TP .B -F, --format=\f2quotaformat\f1 Perform setting for specified format (ie. don't perform format autodetection). Possible format names are: .B vfsold Original quota format with 16-bit UIDs / GIDs, .B vfsv0 Quota format with 32-bit UIDs / GIDs, 64-bit space usage, 32-bit inode usage and limits, .B vfsv1 Quota format with 64-bit quota limits and usage, .B xfs Quota on XFS filesystem. .TP .B -q, --quota-tab=\f2quotatab\f1 Use .I quotatab instead of .I /etc/quotatab as file with device description strings (see .BR quotatab (5) for syntax). .TP .B -c, --config=\f2configfile\f1 Use .I configfile instead of .I /etc/warnquota.conf as configuration file (see .BR warnquota.conf (5) for syntax). .TP .B -a, --admins-file=\f2adminsfile\f1 Use .I adminsfile instead of .I /etc/quotagrpadmins as a file with administrators of the groups (see .BR quotagrpadmins (5) for syntax). .TP .B -u, --user check whether users are not exceeding quotas (default). .TP .B -g, --group check whether groups are not exceeding quotas. If group is exceeding quota a mail is sent to the user specified in /etc/quotagrpadmins. .TP .B -s, --human-readable[=\f2units\f1] Try to report used space, number of used inodes and limits in more appropriate units than the default ones. Units can be also specified explicitely by an optional argument in format [ .BR kgt ],[ .BR kgt ] where the first character specifies space units and the second character specifies inode units. .TP .B -i, --no-autofs ignore mountpoints mounted by automounter. .TP .B -d, --no-details do not attach quota report in email. .SH FILES .PD 0 .TP 20 .B aquota.user quota file at the filesystem root (version 2 quota, non-XFS filesystems) .TP .B quota.user quota file at the filesystem root (version 1 quota, non-XFS filesystems) .TP .B /etc/warnquota.conf configuration file .TP .B /etc/quotatab device description .TP .B /etc/quotagrpadmins administrators of the groups .TP .B /etc/mtab default filesystems .TP .B /etc/passwd default set of users .PD .SH "SEE ALSO" .BR quota (1), .BR quotatab (5), .BR quotagrpadmins (5), .BR warnquota.conf (5), .BR cron (8), .BR edquota (8). .SH AUTHORS .BR warnquota (8) was written by Marco van Wieringen <mvw@planets.elm.net>, modifications by Jan Kara <jack@suse.cz>. This reference page written by Heiko Schlittermann <heiko@lotte.sax.de>, modifications by Jan Kara �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/warnquota.c������������������������������������������������������������������������������0000664�0000000�0000000�00000104664�14463210551�0015000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * QUOTA An implementation of the diskquota system for the LINUX operating * system. QUOTA is implemented using the BSD systemcall interface * as the means of communication with the user level. Should work for * all filesystems because of integration into the VFS layer of the * operating system. This is based on the Melbourne quota system wich * uses both user and group quota files. * * Program to mail to users that they are over there quota. * * Author: Marco van Wieringen <mvw@planets.elm.net> * * 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 <stdio.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <stdarg.h> #include <ctype.h> #include <signal.h> #include <grp.h> #include <time.h> #include <getopt.h> #include <locale.h> #ifdef HAVE_NL_LANGINFO #include <langinfo.h> #endif #include <sys/types.h> #include <sys/wait.h> #include <sys/utsname.h> #ifdef USE_LDAP_MAIL_LOOKUP #include <ldap.h> #endif #include "mntopt.h" #include "pot.h" #include "bylabel.h" #include "common.h" #include "quotasys.h" #include "quotaio.h" /* these are just defaults, overridden in the WARNQUOTA_CONF file */ #define MAIL_CMD "/usr/lib/sendmail -t" #define FROM "support@localhost" #define SUBJECT "Disk Quota usage on system" #define CC_TO "root" #define SUPPORT "support@localhost" #define PHONE "(xxx) xxx-xxxx or (yyy) yyy-yyyy" #define DEF_USER_MESSAGE _("Hi,\n\nWe noticed that you are in violation with the quotasystem\n" \ "used on this system. We have found the following violations:\n\n") #define DEF_USER_SIGNATURE _("\nWe hope that you will cleanup before your grace period expires.\n" \ "\nBasically, this means that the system thinks you are using more disk space\n" \ "on the above partition(s) than you are allowed. If you do not delete files\n" \ "and get below your quota before the grace period expires, the system will\n" \ "prevent you from creating new files.\n\n" \ "For additional assistance, please contact us at %s\nor via " \ "phone at %s.\n") #define DEF_GROUP_MESSAGE _("Hi,\n\nWe noticed that the group %s you are member of violates the quotasystem\n" \ "used on this system. We have found the following violations:\n\n") #define DEF_GROUP_SIGNATURE _("\nPlease cleanup the group data before the grace period expires.\n" \ "\nBasically, this means that the system thinks group is using more disk space\n" \ "on the above partition(s) than it is allowed. If you do not delete files\n" \ "and get below group quota before the grace period expires, the system will\n" \ "prevent you and other members of the group from creating new files owned by\n" \ "the group.\n\n" \ "For additional assistance, please contact us at %s\nor via " \ "phone at %s.\n") #define SHELL "/bin/sh" #define QUOTATAB "/etc/quotatab" #define CNF_BUFFER 2048 #define IOBUF_SIZE 16384 /* Size of buffer for line in config files */ #define ADMIN_TAB_ALLOC 256 /* How many entries to admins table should we allocate at once? */ #define WARNQUOTA_CONF "/etc/warnquota.conf" #define ADMINSFILE "/etc/quotagrpadmins" #define FL_USER 1 #define FL_GROUP 2 #define FL_NOAUTOFS 4 #define FL_NODETAILS 16 #define FL_IGNORE_CFG_ERR 32 struct usage { char *devicename; struct util_dqblk dq_dqb; struct usage *next; }; #ifdef USE_LDAP_MAIL_LOOKUP static LDAP *ldapconn = NULL; #endif struct configparams { char mail_cmd[CNF_BUFFER]; char from[CNF_BUFFER]; char subject[CNF_BUFFER]; char cc_to[CNF_BUFFER]; char support[CNF_BUFFER]; char phone[CNF_BUFFER]; char charset[CNF_BUFFER]; char *user_message; char *user_signature; char *group_message; char *group_signature; time_t cc_before; #ifdef USE_LDAP_MAIL_LOOKUP int use_ldap_mail; /* 0 */ int ldap_is_setup; /* 0 */ int ldap_starttls; /* 0 */ int ldap_tls; /* LDAP_OPT_X_TLS_NEVER */ int ldap_vers; /* LDAP_VERSION3 */ char ldap_host[CNF_BUFFER]; int ldap_port; char ldap_uri[CNF_BUFFER]; char ldap_binddn[CNF_BUFFER]; char ldap_bindpw[CNF_BUFFER]; char ldap_basedn[CNF_BUFFER]; char ldap_search_attr[CNF_BUFFER]; char ldap_mail_attr[CNF_BUFFER]; char default_domain[CNF_BUFFER]; #endif /* USE_LDAP_MAIL_LOOKUP */ }; struct offenderlist { int offender_type; int offender_id; char *offender_name; struct usage *usage; struct offenderlist *next; }; typedef struct quotatable { char *devname; char *devdesc; } quotatable_t; struct adminstable { char *grpname; char *adminname; }; static int qtab_i = 0, fmt = -1, flags; static char maildev[CNF_BUFFER]; static struct quota_handle *maildev_handle; static char *configfile = WARNQUOTA_CONF, *quotatabfile = QUOTATAB, *adminsfile = ADMINSFILE; char *progname; static char *hostname, *domainname; static quotatable_t *quotatable; static int adminscnt, adminsalloc; static struct adminstable *adminstable; static enum s2s_unit spaceunit = S2S_NONE, inodeunit = S2S_NONE; /* * Global pointers to list. */ static struct offenderlist *offenders = (struct offenderlist *)0; /* * add any cleanup functions here */ static void wc_exit(int ex_stat) { #ifdef USE_LDAP_MAIL_LOOKUP if(ldapconn != NULL) ldap_unbind_ext(ldapconn, NULL, NULL); #endif exit(ex_stat); } #ifdef USE_LDAP_MAIL_LOOKUP #define LDAP_ERR_BUF_SIZE 1024 static void print_ldap_error(int err, char *prefix) { char *msg = NULL; char outbuf[LDAP_ERR_BUF_SIZE]; sstrncpy(outbuf, prefix, LDAP_ERR_BUF_SIZE); sstrncat(outbuf, ": %s\n", LDAP_ERR_BUF_SIZE); errstr(outbuf, ldap_err2string(err)); ldap_get_option(ldapconn, LDAP_OPT_DIAGNOSTIC_MESSAGE, (void *)&msg); if (msg) { if (strcmp(msg, "")) errstr(_("Additional error info: %s\n"), msg); ldap_memfree(msg); } } static int setup_ldap(struct configparams *config) { int ret; struct berval cred = { .bv_val = config->ldap_bindpw, .bv_len = strlen(config->ldap_bindpw) }; ret = ldap_initialize(&ldapconn, config->ldap_uri); if (ret != LDAP_SUCCESS) { print_ldap_error(ret, _("ldap_initialize() failed")); return -1; } if (config->ldap_starttls) { ldap_set_option(ldapconn, LDAP_OPT_PROTOCOL_VERSION, &(config->ldap_vers)); ldap_set_option(ldapconn, LDAP_OPT_X_TLS_REQUIRE_CERT, &(config->ldap_tls)); ret = ldap_start_tls_s(ldapconn, NULL, NULL); if (ret != LDAP_SUCCESS) { print_ldap_error(ret, _("ldap_start_tls_s() failed")); return -1; } } ret = ldap_sasl_bind_s(ldapconn, config->ldap_binddn, LDAP_SASL_SIMPLE, &cred, NULL, NULL, NULL); if (ret != LDAP_SUCCESS) { print_ldap_error(ret, _("ldap_sasl_bind_s() failed")); return -1; } return 0; } #endif static struct offenderlist *add_offender(int type, int id, char *name) { struct offenderlist *offender; char namebuf[MAXNAMELEN]; if (!name) { if (id2name(id, type, namebuf)) { errstr(_("Cannot get name for uid/gid %u.\n"), id); return NULL; } name = namebuf; } offender = (struct offenderlist *)smalloc(sizeof(struct offenderlist)); offender->offender_type = type; offender->offender_id = id; offender->offender_name = sstrdup(name); offender->usage = (struct usage *)NULL; offender->next = offenders; offenders = offender; return offender; } static void add_offence(struct dquot *dquot, char *name) { struct offenderlist *lptr; struct usage *usage; for (lptr = offenders; lptr; lptr = lptr->next) if (dquot->dq_h->qh_type == lptr->offender_type && lptr->offender_id == dquot->dq_id) break; if (!lptr) if (!(lptr = add_offender(dquot->dq_h->qh_type, dquot->dq_id, name))) return; usage = (struct usage *)smalloc(sizeof(struct usage)); memcpy(&usage->dq_dqb, &dquot->dq_dqb, sizeof(struct util_dqblk)); usage->devicename = sstrdup(dquot->dq_h->qh_quotadev); /* * Stuff it in front */ usage->next = lptr->usage; lptr->usage = usage; } static int deliverable(struct dquot *dquot) { time_t now; struct dquot *mdquot; if (!maildev[0]) return 1; time(&now); if (!strcasecmp(maildev, "any") && ((dquot->dq_dqb.dqb_bhardlimit && toqb(dquot->dq_dqb.dqb_curspace) >= dquot->dq_dqb.dqb_bhardlimit) || ((dquot->dq_dqb.dqb_bsoftlimit && toqb(dquot->dq_dqb.dqb_curspace) >= dquot->dq_dqb.dqb_bsoftlimit) && (dquot->dq_dqb.dqb_btime && dquot->dq_dqb.dqb_btime <= now)))) return 0; if (!maildev_handle) return 1; mdquot = maildev_handle->qh_ops->read_dquot(maildev_handle, dquot->dq_id); if (mdquot && ((mdquot->dq_dqb.dqb_bhardlimit && toqb(mdquot->dq_dqb.dqb_curspace) >= mdquot->dq_dqb.dqb_bhardlimit) || ((mdquot->dq_dqb.dqb_bsoftlimit && toqb(mdquot->dq_dqb.dqb_curspace) >= mdquot->dq_dqb.dqb_bsoftlimit) && (mdquot->dq_dqb.dqb_btime && mdquot->dq_dqb.dqb_btime <= now)))) { free(mdquot); return 0; } free(mdquot); return 1; } static int check_offence(struct dquot *dquot, char *name) { if ((dquot->dq_dqb.dqb_bsoftlimit && toqb(dquot->dq_dqb.dqb_curspace) >= dquot->dq_dqb.dqb_bsoftlimit) || (dquot->dq_dqb.dqb_isoftlimit && dquot->dq_dqb.dqb_curinodes >= dquot->dq_dqb.dqb_isoftlimit)) { if(deliverable(dquot)) add_offence(dquot, name); } return 0; } static FILE *run_mailer(char *command) { int pipefd[2]; FILE *f; if (pipe(pipefd) < 0) { errstr(_("Cannot create pipe: %s\n"), strerror(errno)); return NULL; } signal(SIGPIPE, SIG_IGN); switch(fork()) { case -1: errstr(_("Cannot fork: %s\n"), strerror(errno)); return NULL; case 0: close(pipefd[1]); if (dup2(pipefd[0], 0) < 0) { errstr(_("Cannot duplicate descriptor: %s\n"), strerror(errno)); wc_exit(1); } execl(SHELL, SHELL, "-c", command, NULL); errstr(_("Cannot execute '%s': %s\n"), command, strerror(errno)); wc_exit(1); default: close(pipefd[0]); if (!(f = fdopen(pipefd[1], "w"))) errstr(_("Cannot open pipe: %s\n"), strerror(errno)); return f; } } static int admin_name_cmp(const void *key, const void *mem) { return strcmp(key, ((struct adminstable *)mem)->grpname); } static int should_cc(struct offenderlist *offender, struct configparams *config) { struct usage *lptr; struct util_dqblk *dqb; time_t atime; /* Noone to send CC to? */ if (!strcmp(config->cc_to, "")) return 0; if (config->cc_before == -1) return 1; time(&atime); for (lptr = offender->usage; lptr; lptr = lptr->next) { dqb = &lptr->dq_dqb; if (dqb->dqb_bsoftlimit && dqb->dqb_bsoftlimit <= toqb(dqb->dqb_curspace) && dqb->dqb_btime-config->cc_before <= atime) return 1; if (dqb->dqb_isoftlimit && dqb->dqb_isoftlimit <= dqb->dqb_curinodes && dqb->dqb_itime-config->cc_before <= atime) return 1; } return 0; } /* Substitute %s and %i for 'name' and %h for hostname */ static void format_print(FILE *fp, char *fmt, char *name) { char *ch, *lastch = fmt; for (ch = strchr(fmt, '%'); ch; lastch = ch+2, ch = strchr(ch+2, '%')) { *ch = 0; fputs(lastch, fp); *ch = '%'; switch (*(ch+1)) { case 's': case 'i': fputs(name, fp); break; case 'h': fputs(hostname, fp); break; case 'd': fputs(domainname, fp); break; case '%': fputc('%', fp); break; } } fputs(lastch, fp); } static char *lookup_user(struct configparams *config, char *user) { #ifdef USE_LDAP_MAIL_LOOKUP char searchbuf[256]; LDAPMessage *result, *entry; BerElement *ber = NULL; struct berval **bvals = NULL; int ret, cnt; char *a; char *to = NULL; if (!config->use_ldap_mail) return sstrdup(user); if (ldapconn == NULL && config->ldap_is_setup == 0) { /* need init */ if (setup_ldap(config)) { errstr(_("Could not setup ldap connection.\n")); return NULL; } config->ldap_is_setup = 1; } if (ldapconn == NULL) { /* * ldap was never setup correctly so just use * the offender_name */ return sstrdup(user); } /* search for the offender_name in ldap */ if (256 <= snprintf(searchbuf, 256, "(%s=%s)", config->ldap_search_attr, user)) { errstr(_("Could not format LDAP search filter for %s user and " "%s search attribute due to excessive length.\n"), user, config->ldap_search_attr); return NULL; } ret = ldap_search_ext_s(ldapconn, config->ldap_basedn, LDAP_SCOPE_SUBTREE, searchbuf, NULL, 0, NULL, NULL, NULL, 0, &result); if (ret != LDAP_SUCCESS) { errstr(_("Error with %s.\n"), user); print_ldap_error(ret, _("ldap_search_ext_s() failed")); return NULL; } cnt = ldap_count_entries(ldapconn, result); if (cnt > 1) { errstr(_("Multiple entries found for client %s (%d).\n"), user, cnt); return NULL; } else if (cnt == 0) { errstr(_("Entry not found for client %s.\n"), user); return NULL; } /* get the attr */ entry = ldap_first_entry(ldapconn, result); for (a = ldap_first_attribute(ldapconn, entry, &ber); a != NULL; a = ldap_next_attribute(ldapconn, entry, ber)) { if (strcasecmp(a, config->ldap_mail_attr) == 0) { bvals = ldap_get_values_len(ldapconn, entry, a); if (bvals == NULL) { errstr(_("Could not get values for %s.\n"), user); return NULL; } to = sstrdup(bvals[0]->bv_val); ldap_memfree(a); ldap_value_free_len(bvals); break; } ldap_memfree(a); } ber_free(ber, 0); if (to == NULL) { /* * use just the name and default domain as we didn't find the * attribute we wanted in this entry */ to = smalloc(strlen(user) + strlen(config->default_domain) + 1); sprintf(to, "%s@%s", user, config->default_domain); } return to; #else return sstrdup(user); #endif } static int mail_user(struct offenderlist *offender, struct configparams *config) { struct usage *lptr; FILE *fp; int cnt, status; char timebuf[MAXTIMELEN]; char numbuf[3][MAXNUMLEN]; struct util_dqblk *dqb; char *to = NULL; if (offender->offender_type == USRQUOTA) { to = lookup_user(config, offender->offender_name); if (!to) return -1; } else { struct adminstable *admin; if (!(admin = bsearch(offender->offender_name, adminstable, adminscnt, sizeof(struct adminstable), admin_name_cmp))) { errstr(_("Administrator for a group %s not found. Cancelling mail.\n"), offender->offender_name); return -1; } to = sstrdup(admin->adminname); } if (!(fp = run_mailer(config->mail_cmd))) { if (to) free(to); return -1; } fprintf(fp, "From: %s\n", config->from); fprintf(fp, "Reply-To: %s\n", config->support); fprintf(fp, "Subject: %s\n", config->subject); fprintf(fp, "To: %s\n", to); if (should_cc(offender, config)) { char *cc_to = lookup_user(config, config->cc_to); if (cc_to) { fprintf(fp, "Cc: %s\n", cc_to); free(cc_to); } } if ((config->charset)[0] != '\0') { /* are we supposed to set the encoding */ fprintf(fp, "MIME-Version: 1.0\n"); fprintf(fp, "Content-Type: text/plain; charset=%s\n", config->charset); fprintf(fp, "Content-Disposition: inline\n"); fprintf(fp, "Content-Transfer-Encoding: 8bit\n"); } fprintf(fp, "\n"); free(to); if (offender->offender_type == USRQUOTA) if (config->user_message) format_print(fp, config->user_message, offender->offender_name); else fputs(DEF_USER_MESSAGE, fp); else if (config->group_message) format_print(fp, config->group_message, offender->offender_name); else fprintf(fp, DEF_GROUP_MESSAGE, offender->offender_name); if (!(flags & FL_NODETAILS)) { for (lptr = offender->usage; lptr; lptr = lptr->next) { dqb = &lptr->dq_dqb; for (cnt = 0; cnt < qtab_i; cnt++) if (!strcmp(quotatable[cnt].devname, lptr->devicename)) { fprintf(fp, "\n%s (%s)\n", quotatable[cnt].devdesc, quotatable[cnt].devname); break; } if (cnt == qtab_i) /* Description not found? */ fprintf(fp, "\n%s\n", lptr->devicename); fprintf(fp, _("\n Block limits File limits\n")); fprintf(fp, _("Filesystem used soft hard grace used soft hard grace\n")); if (strlen(lptr->devicename) > 15) fprintf(fp, "%s\n%15s", lptr->devicename, ""); else fprintf(fp, "%-15s", lptr->devicename); if (dqb->dqb_bsoftlimit && dqb->dqb_bsoftlimit <= toqb(dqb->dqb_curspace)) difftime2str(dqb->dqb_btime, timebuf); else timebuf[0] = '\0'; space2str(toqb(dqb->dqb_curspace), numbuf[0], spaceunit); space2str(dqb->dqb_bsoftlimit, numbuf[1], spaceunit); space2str(dqb->dqb_bhardlimit, numbuf[2], spaceunit); fprintf(fp, "%c%c %7s %7s %7s %6s", dqb->dqb_bsoftlimit && toqb(dqb->dqb_curspace) >= dqb->dqb_bsoftlimit ? '+' : '-', dqb->dqb_isoftlimit && dqb->dqb_curinodes >= dqb->dqb_isoftlimit ? '+' : '-', numbuf[0], numbuf[1], numbuf[2], timebuf); if (dqb->dqb_isoftlimit && dqb->dqb_isoftlimit <= dqb->dqb_curinodes) difftime2str(dqb->dqb_itime, timebuf); else timebuf[0] = '\0'; number2str(dqb->dqb_curinodes, numbuf[0], inodeunit); number2str(dqb->dqb_isoftlimit, numbuf[1], inodeunit); number2str(dqb->dqb_ihardlimit, numbuf[2], inodeunit); fprintf(fp, " %7s %5s %5s %6s\n\n", numbuf[0], numbuf[1], numbuf[2], timebuf); } } if (offender->offender_type == USRQUOTA) if (config->user_signature) format_print(fp, config->user_signature, offender->offender_name); else fprintf(fp, DEF_USER_SIGNATURE, config->support, config->phone); else if (config->group_signature) format_print(fp, config->group_signature, offender->offender_name); else fprintf(fp, DEF_GROUP_SIGNATURE, config->support, config->phone); fclose(fp); if (wait(&status) < 0) /* Wait for mailer */ errstr(_("Cannot wait for mailer: %s\n"), strerror(errno)); else if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) errstr(_("Warning: Mailer exitted abnormally.\n")); return 0; } static int mail_to_offenders(struct configparams *config) { struct offenderlist *lptr; int ret = 0; /* * Dump offenderlist. */ for (lptr = offenders; lptr; lptr = lptr->next) ret |= mail_user(lptr, config); return ret; } /* * Wipe spaces, tabs, quotes and newlines from beginning and end of string */ static void stripstring(char **buff) { int i; /* first put a \0 at the tight place to end the string */ for (i = strlen(*buff) - 1; i >= 0 && (isspace((*buff)[i]) || (*buff)[i] == '"' || (*buff)[i] == '\''); i--); (*buff)[i+1] = 0; /* then determine the position to start */ for (i = 0; (*buff)[i] && (isspace((*buff)[i]) || (*buff)[i] == '"' || (*buff)[i] == '\''); i++); *buff += i; } /* * Substitute '|' with end of lines */ static void create_eoln(char *buf) { char *colpos = buf; while ((colpos = strchr(colpos, '|'))) *colpos = '\n'; } /* * Read /etc/quotatab (description of devices for users) */ static int get_quotatable(void) { FILE *fp; char buffer[IOBUF_SIZE], *colpos, *devname, *devdesc; int line; struct stat st; if (!(fp = fopen(quotatabfile, "r"))) { errstr(_("Cannot open %s: %s\nWill use device names.\n"), quotatabfile, strerror(errno)); qtab_i = 0; return 0; } line = 0; for (qtab_i = 0; quotatable = srealloc(quotatable, sizeof(quotatable_t) * (qtab_i + 1)), fgets(buffer, sizeof(buffer), fp); qtab_i++) { line++; quotatable[qtab_i].devname = NULL; quotatable[qtab_i].devdesc = NULL; if (buffer[0] == '#' || buffer[0] == ';') { /* Comment? */ qtab_i--; continue; } /* Empty line? */ for (colpos = buffer; isspace(*colpos); colpos++); if (!*colpos) { qtab_i--; continue; } /* Parse line */ if (!(colpos = strchr(buffer, ':'))) { errstr(_("Cannot parse line %d in quotatab (missing ':')\n"), line); qtab_i--; continue; } *colpos = 0; devname = buffer; devdesc = colpos+1; stripstring(&devname); stripstring(&devdesc); quotatable[qtab_i].devname = sstrdup(devname); quotatable[qtab_i].devdesc = sstrdup(devdesc); create_eoln(quotatable[qtab_i].devdesc); if (stat(quotatable[qtab_i].devname, &st) < 0) errstr(_("Cannot stat device %s (maybe typo in quotatab)\n"), quotatable[qtab_i].devname); } fclose(fp); return 0; } /* Check correctness of the given format */ static void verify_format(char *fmt, char *varname) { char *ch; for (ch = strchr(fmt, '%'); ch; ch = strchr(ch+2, '%')) { switch (*(ch+1)) { case 's': case 'i': case 'h': case 'd': case '%': continue; default: die(1, _("Incorrect format string for variable %s.\n\ Unrecognized expression %%%c.\n"), varname, *(ch+1)); } } } static void print_cfg_err(char *fmt, ...) { va_list args; va_start(args, fmt); errstrv(fmt, args); va_end(args); if (flags & FL_IGNORE_CFG_ERR) { errstr(_("Ignoring error in config file.\n")); } else { errstr(_("Aborting. Use option -I if you want warnquota to " "ignore errors in the config file as it used to in " "older versions.\n")); } } /* * Reads config parameters from configfile * uses default values if errstr occurs */ static int readconfigfile(const char *filename, struct configparams *config) { FILE *fp; char buff[IOBUF_SIZE]; char *var; char *value; char *pos; int line, len, bufpos; char *locale; /* set default values */ memset(config, 0, sizeof(*config)); sstrncpy(config->mail_cmd, MAIL_CMD, CNF_BUFFER); sstrncpy(config->from, FROM, CNF_BUFFER); sstrncpy(config->subject, SUBJECT, CNF_BUFFER); sstrncpy(config->cc_to, CC_TO, CNF_BUFFER); sstrncpy(config->support, SUPPORT, CNF_BUFFER); sstrncpy(config->phone, PHONE, CNF_BUFFER); setlocale(LC_ALL, NULL); locale = setlocale(LC_MESSAGES, NULL); #ifdef HAVE_NL_LANGINFO if (locale && strcasecmp(locale, "posix") && strcasecmp(locale, "c")) { locale = nl_langinfo(CODESET); sstrncpy(config->charset, locale, CNF_BUFFER); } #endif maildev[0] = 0; config->cc_before = -1; #ifdef USE_LDAP_MAIL_LOOKUP config->ldap_tls = LDAP_OPT_X_TLS_NEVER; config->ldap_vers = LDAP_VERSION3; #endif if (!(fp = fopen(filename, "r"))) { errstr(_("Cannot open %s: %s\n"), filename, strerror(errno)); return -1; } line = 0; bufpos = 0; while (fgets(buff + bufpos, sizeof(buff) - bufpos, fp)) { /* start reading lines */ line++; if (!bufpos) { /* check for comments or empty lines */ if (buff[0] == '#' || buff[0] == ';') continue; /* Is line empty? */ for (pos = buff; isspace(*pos); pos++); if (!*pos) /* Nothing else was on the line */ continue; } len = bufpos + strlen(buff+bufpos); if (buff[len-1] != '\n') { if (len == IOBUF_SIZE-1) { print_cfg_err( _("line %d: Line too long! Maximum is %d.\n"), line, IOBUF_SIZE-1); if (flags & FL_IGNORE_CFG_ERR) continue; return -1; } /* Last line without \n. Just pretend there is one. */ len++; } else { len--; if (buff[len-1] == '\\') { /* Should join with next line? */ bufpos = len-1; continue; } } buff[len] = 0; bufpos = 0; /* check for a '=' char */ if ((pos = strchr(buff, '='))) { *pos = 0; /* split buff in two parts: var and value */ var = buff; value = pos + 1; stripstring(&var); stripstring(&value); /* check if var matches anything */ if (!strcmp(var, "MAIL_CMD")) sstrncpy(config->mail_cmd, value, CNF_BUFFER); else if (!strcmp(var, "FROM")) sstrncpy(config->from, value, CNF_BUFFER); else if (!strcmp(var, "SUBJECT")) sstrncpy(config->subject, value, CNF_BUFFER); else if (!strcmp(var, "CC_TO")) sstrncpy(config->cc_to, value, CNF_BUFFER); else if (!strcmp(var, "SUPPORT")) sstrncpy(config->support, value, CNF_BUFFER); else if (!strcmp(var, "PHONE")) sstrncpy(config->phone, value, CNF_BUFFER); else if (!strcmp(var, "CHARSET")) sstrncpy(config->charset, value, CNF_BUFFER); else if (!strcmp(var, "MAILDEV")) /* set the global */ sstrncpy(maildev, value, CNF_BUFFER); else if (!strcmp(var, "MESSAGE")) { config->user_message = sstrdup(value); create_eoln(config->user_message); verify_format(config->user_message, "MESSAGE"); } else if (!strcmp(var, "SIGNATURE")) { config->user_signature = sstrdup(value); create_eoln(config->user_signature); verify_format(config->user_signature, "SIGNATURE"); } else if (!strcmp(var, "GROUP_MESSAGE")) { config->group_message = sstrdup(value); create_eoln(config->group_message); verify_format(config->group_message, "GROUP_MESSAGE"); } else if (!strcmp(var, "GROUP_SIGNATURE")) { config->group_signature = sstrdup(value); create_eoln(config->group_signature); verify_format(config->group_signature, "GROUP_SIGNATURE"); } else if (!strcmp(var, "CC_BEFORE")) { int num; char unit[10]; if (sscanf(value, "%d%s", &num, unit) != 2) goto cc_parse_err; if (str2timeunits(num, unit, &config->cc_before) < 0) { cc_parse_err: die(1, _("Cannot parse time at CC_BEFORE variable (line %d).\n"), line); } } #ifdef USE_LDAP_MAIL_LOOKUP else if (!strcmp(var, "LDAP_MAIL")) { if(strcasecmp(value, "true") == 0) config->use_ldap_mail = 1; else config->use_ldap_mail = 0; } else if (!strcmp(var, "LDAP_TLS")) { if (strcasecmp(value, "never") == 0) { config->ldap_starttls = 1; config->ldap_tls = LDAP_OPT_X_TLS_NEVER; } else if (strcasecmp(value, "demand") == 0) { config->ldap_starttls = 1; config->ldap_tls = LDAP_OPT_X_TLS_DEMAND; } else if (strcasecmp(value, "allow") == 0) { config->ldap_starttls = 1; config->ldap_tls = LDAP_OPT_X_TLS_ALLOW; } else if (strcasecmp(value, "try") == 0) { config->ldap_starttls = 1; config->ldap_tls = LDAP_OPT_X_TLS_TRY; } else config->ldap_starttls = 0; } else if (!strcmp(var, "LDAP_HOST")) sstrncpy(config->ldap_host, value, CNF_BUFFER); else if (!strcmp(var, "LDAP_PORT")) config->ldap_port = (int)strtol(value, NULL, 10); else if (!strcmp(var, "LDAP_URI")) sstrncpy(config->ldap_uri, value, CNF_BUFFER); else if(!strcmp(var, "LDAP_BINDDN")) sstrncpy(config->ldap_binddn, value, CNF_BUFFER); else if(!strcmp(var, "LDAP_BINDPW")) sstrncpy(config->ldap_bindpw, value, CNF_BUFFER); else if(!strcmp(var, "LDAP_BASEDN")) sstrncpy(config->ldap_basedn, value, CNF_BUFFER); else if(!strcmp(var, "LDAP_SEARCH_ATTRIBUTE")) sstrncpy(config->ldap_search_attr, value, CNF_BUFFER); else if(!strcmp(var, "LDAP_MAIL_ATTRIBUTE")) sstrncpy(config->ldap_mail_attr, value, CNF_BUFFER); else if(!strcmp(var, "LDAP_DEFAULT_MAIL_DOMAIN")) sstrncpy(config->default_domain, value, CNF_BUFFER); #else else if (!strcmp(var, "LDAP_MAIL") || !strcmp(var, "LDAP_TLS") || !strcmp(var, "LDAP_HOST") || !strcmp(var, "LDAP_PORT") || !strcmp(var, "LDAP_URI") || !strcmp(var, "LDAP_BINDDN") || !strcmp(var, "LDAP_BINDPW") || !strcmp(var, "LDAP_BASEDN") || !strcmp(var, "LDAP_SEARCH_ATTRIBUTE") || !strcmp(var, "LDAP_MAIL_ATTRIBUTE") || !strcmp(var, "LDAP_DEFAULT_MAIL_DOMAIN")) { print_cfg_err(_("line %d: LDAP variable in config " "file but LDAP support is not compiled.\n"), line); if (flags & FL_IGNORE_CFG_ERR) continue; return -1; } #endif else { /* not matched at all */ print_cfg_err(_("line %d: Unknown variable %s in " "config file.\n"), line, var); if (flags & FL_IGNORE_CFG_ERR) continue; return -1; } } else { /* no '=' char in this line */ print_cfg_err(_("line %d: Missing '=' in config file.\n"), line); if (flags & FL_IGNORE_CFG_ERR) continue; return -1; } } if (bufpos) { print_cfg_err(_("line %d: Unterminated last line.\n"), line); if (!(flags & FL_IGNORE_CFG_ERR)) return -1; } #ifdef USE_LDAP_MAIL_LOOKUP if (config->use_ldap_mail) { if (!config->ldap_uri[0]) { if (CNF_BUFFER <= snprintf(config->ldap_uri, CNF_BUFFER, "ldap://%s:%d", config->ldap_host, config->ldap_port)) { errstr(_("Could not format LDAP URI because " "it's longer than %d bytes.\n"), CNF_BUFFER); return -1; } errstr(_("LDAP library version >= 2.3 detected. Please use LDAP_URI instead of hostname and port.\nGenerated URI %s\n"), config->ldap_uri); } } #endif fclose(fp); return 0; } static int admin_cmp(const void *a1, const void *a2) { return strcmp(((struct adminstable *)a1)->grpname, ((struct adminstable *)a2)->grpname); } /* Get administrators of the groups */ static int get_groupadmins(void) { FILE *f; int line = 0; char buffer[IOBUF_SIZE], *colpos, *grouppos, *endname, *adminpos; if (!(f = fopen(adminsfile, "r"))) { errstr(_("Cannot open file with group administrators: %s\n"), strerror(errno)); return -1; } while (fgets(buffer, IOBUF_SIZE, f)) { line++; if (buffer[0] == ';' || buffer[0] == '#') continue; /* Skip initial spaces */ for (colpos = buffer; isspace(*colpos); colpos++); if (!*colpos) /* Empty line? */ continue; /* Find splitting colon */ for (grouppos = colpos; *colpos && *colpos != ':'; colpos++); if (!*colpos || grouppos == colpos) { errstr(_("Parse error at line %d. Cannot find end of group name.\n"), line); continue; } /* Cut trailing spaces */ for (endname = colpos-1; isspace(*endname); endname--); *(++endname) = 0; /* Skip initial spaces at admins name */ for (colpos++; isspace(*colpos); colpos++); if (!*colpos) { errstr(_("Parse error at line %d. Cannot find administrators name.\n"), line); continue; } /* Go through admins name */ for (adminpos = colpos; !isspace(*colpos); colpos++); if (*colpos) { /* Some characters after name? */ *colpos = 0; /* Skip trailing spaces */ for (colpos++; isspace(*colpos); colpos++); if (*colpos) { errstr(_("Parse error at line %d. Trailing characters after administrators name.\n"), line); continue; } } if (adminscnt >= adminsalloc) adminstable = srealloc(adminstable, sizeof(struct adminstable)*(adminsalloc+=ADMIN_TAB_ALLOC)); adminstable[adminscnt].grpname = sstrdup(grouppos); adminstable[adminscnt++].adminname = sstrdup(adminpos); } fclose(f); qsort(adminstable, adminscnt, sizeof(struct adminstable), admin_cmp); return 0; } static struct quota_handle *find_handle_dev(char *dev, struct quota_handle **handles) { int i; for (i = 0; handles[i] && strcmp(dev, handles[i]->qh_quotadev); i++); return handles[i]; } static void warn_quota(int fs_count, char **fs) { struct quota_handle **handles; struct configparams config; int i; if (readconfigfile(configfile, &config) < 0) wc_exit(1); if (get_quotatable() < 0) wc_exit(1); if (flags & FL_USER) { handles = create_handle_list(fs_count, fs, USRQUOTA, -1, IOI_READONLY | IOI_INITSCAN, MS_LOCALONLY | (flags & FL_NOAUTOFS ? MS_NO_AUTOFS : 0)); if (!maildev[0] || !strcasecmp(maildev, "any")) maildev_handle = NULL; else maildev_handle = find_handle_dev(maildev, handles); for (i = 0; handles[i]; i++) handles[i]->qh_ops->scan_dquots(handles[i], check_offence); dispose_handle_list(handles); } if (flags & FL_GROUP) { if (get_groupadmins() < 0) wc_exit(1); handles = create_handle_list(fs_count, fs, GRPQUOTA, -1, IOI_READONLY | IOI_INITSCAN, MS_LOCALONLY | (flags & FL_NOAUTOFS ? MS_NO_AUTOFS : 0)); if (!maildev[0] || !strcasecmp(maildev, "any")) maildev_handle = NULL; else maildev_handle = find_handle_dev(maildev, handles); for (i = 0; handles[i]; i++) handles[i]->qh_ops->scan_dquots(handles[i], check_offence); dispose_handle_list(handles); } if (mail_to_offenders(&config) < 0) wc_exit(1); } /* Print usage information */ static void usage(void) { errstr(_("Usage:\n warnquota [-ugsid] [-F quotaformat] [-c configfile] [-q quotatabfile] [-a adminsfile] [filesystem...]\n\n\ -u, --user warn users\n\ -g, --group warn groups\n\ -s, --human-readable[=units] display numbers in human friendly units (MB,\n\ GB, ...). Units can be also specified\n\ explicitely by an optional argument in format\n\ [kgt],[kgt] where the first character specifies\n\ space units and the second character specifies\n\ inode units\n\ -i, --no-autofs avoid autofs mountpoints\n\ -d, --no-details do not send quota information itself\n\ -F, --format=formatname use quotafiles of specific format\n\ -c, --config=config-file non-default config file\n\ -q, --quota-tab=quotatab-file non-default quotatab\n\ -a, --admins-file=admins-file non-default admins file\n\ -I, --ignore-config-errors ignore unknown statements in config file\n\ -h, --help display this help message and exit\n\ -V, --version display version information and exit\n\n")); errstr(_("Bugs to %s\n"), PACKAGE_BUGREPORT); wc_exit(1); } static void parse_options(int argcnt, char **argstr) { int ret; struct option long_opts[] = { { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "version", 0, NULL, 'V' }, { "help", 0, NULL, 'h' }, { "format", 1, NULL, 'F' }, { "config", 1, NULL, 'c' }, { "quota-tab", 1, NULL, 'q' }, { "admins-file", 1, NULL, 'a' }, { "no-autofs", 0, NULL, 'i' }, { "human-readable", 2, NULL, 's' }, { "no-details", 0, NULL, 'd' }, { "ignore-config-errors", 0, NULL, 'I' }, { NULL, 0, NULL, 0 } }; while ((ret = getopt_long(argcnt, argstr, "ugVF:hc:q:a:is::dI", long_opts, NULL)) != -1) { switch (ret) { case '?': case 'h': usage(); case 'V': version(); exit(0); case 'F': if ((fmt = name2fmt(optarg)) == QF_ERROR) wc_exit(1); break; case 'c': configfile = optarg; break; case 'q': quotatabfile = optarg; break; case 'a': adminsfile = optarg; break; case 'u': flags |= FL_USER; break; case 'g': flags |= FL_GROUP; break; case 'i': flags |= FL_NOAUTOFS; break; case 's': inodeunit = spaceunit = S2S_AUTO; if (optarg) { if (unitopt2unit(optarg, &spaceunit, &inodeunit) < 0) die(1, _("Bad output format units for human readable output: %s\n"), optarg); } break; case 'd': flags |= FL_NODETAILS; break; case 'I': flags |= FL_IGNORE_CFG_ERR; break; } } if (!(flags & FL_USER) && !(flags & FL_GROUP)) flags |= FL_USER; } static void get_host_name(void) { struct utsname uts; if (uname(&uts)) die(1, _("Cannot get host name: %s\n"), strerror(errno)); hostname = sstrdup(uts.nodename); domainname = sstrdup(uts.domainname); } int main(int argc, char **argv) { gettexton(); progname = basename(argv[0]); get_host_name(); parse_options(argc, argv); init_kernel_interface(); warn_quota(argc - optind, argc > optind ? argv + optind : NULL); wc_exit(0); return 0; } ����������������������������������������������������������������������������quota-4.09/warnquota.conf���������������������������������������������������������������������������0000664�0000000�0000000�00000007536�14463210551�0015503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������################################################################### # Configuration file for the warnquota utility # File Format: # ^^^^^^^^^^^^ # (1) lines begining with # or ; are comments # (2) blank lines are ignored # (3) other lines have the form 'value = string' # (4) strings may be quoted (double quotes) but they don't have to # (5) strings may end with backslash in order to continue # on the next line # (6) line breaks are marked with '|' character ################################################################### # # Comment this out or remove it once you have edited this config file # FAIL = "configure /etc/warnquota.conf before running warnquota" # # command used for sending mails # MAIL_CMD = "/usr/lib/sendmail -t" # # Standard mail fields FROM = "root@localhost" SUBJECT = "Your account quota has exceeded!" # Note that if LDAP is configured, the name in CC_TO gets looked up in LDAP # to obtain email address similarly to email recipient address. CC_TO = "root@localhost" # If you set this variable CC will be used only when user has less than # specified grace time left (examples of possible times: 5 seconds, 1 minute, # 12 hours, 5 days) # CC_BEFORE = 2 days SUPPORT = "root@localhost" PHONE = "123 456 789" # Text in the beginning of the mail (if not specified, default text is used) # This way text can be split to more lines # Line breaks are done by '|' character # The expressions %i, %h, %d, and %% are substituted for user/group name, # host name, domain name, and '%' respectively. For backward compatibility # %s behaves as %i but is deprecated. MESSAGE = Hello user %i, I've noticed you use too much space\ on my disk in %h.%d.|Delete your files on the following filesystems:| # Text in the end of the mail (if not specified, default text using SUPPORT and PHONE # is created) SIGNATURE = See you!| Your admin of %h| # Following text is used for mails about group exceeding quotas GROUP_MESSAGE = Hello,|\ your group %i is using too much disk space at %h.|\ I suggest you to clean up group files on the following filesystems:| # Text in the end of the mail to the group (if not specified, default text using SUPPORT # and PHONE is created). GROUP_SIGNATURE = See you!| Your admin| # #If you are running warnquota on a mail server, and don't want bounces #because clients cannot receive mail setting this to "any" will cause #warnquota to not send them mail for all devices. If you set this to the #device name (for example /dev/hdb1) then they will not be sent mail if they #are overquota on that device only, and will be sent mail for all other #devices. #MAILDEV = # #Here you can set a charset for emails sent by warnquota (e.g. UTF-8) #CHARSET = ############################################################## # Configuration for LDAP (if you are using LDAP mail lookups) # host, port, tls, binddn, and bindpw are straight forward. ############################################################## # Your search base dn # # LDAP_BASEDN # Your search bind dn # # LDAP_BINDDN # Your search bind password # # LDAP_BINDPW # The attr for the value you are looking for # # LDAP_SEARCH_ATTRIBUTE # The attribute you want used for the mail address # # LDAP_MAIL_ATTRIBUTE # The default domain if the attribute isn't found # # LDAP_DEFAULT_MAIL_DOMAIN # Whether LDAP support should be used # # LDAP_MAIL = false # Ldap server. For LDAP >= 2.3 use # # LDAP_URI = ldaps://my.server:389 # # For older LDAP libraries use # # LDAP_HOST = my.server # LDAP_PORT = 389 # TLS handling for the connection # # LDAP_TLS = (false|never|allow|try|demand) # false - don't use start TLS # never - don't ask for a certificate # allow - request certificate, proceed even if not verified # try - request certificate, terminate if bad, proceed if not sent # demand - request certificate, proceed only if verified # # end of example warnquota.conf file # ������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/warnquota.conf.5�������������������������������������������������������������������������0000664�0000000�0000000�00000010410�14463210551�0015627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH WARNQUOTA.CONF 5 .SH NAME warnquota.conf \- configuration for warnquota .SH SYNOPSIS .B /etc/warnquota.conf .SH DESCRIPTION The .B warnquota.conf file stores a configuration for .BR warnquota (8) tool which is used to notify a user or a group who exceeds its disk quota limits. .P The syntax is an option name followed by an equal sign and the option value. White space characters surrounding the option names and values are allowed. .P Empty lines or lines starting with a hash sign or a semicolon are ignored. .P An option value can but does not have to be quoted. The value can span across multiple lines provided each previous line ends with a backslash. .P Some option values can contain formatting sequences which will be expanded to their respective values. Following sequences are recognized: .P .PD 0 .TP 20 .B %d domain name .TP .B %h host name .TP .BR "%i" ", " "%s" user or group name .TP .B %% literal % character .TP .B | new-line character .PD .SH OPTIONS .PD 0 .TP 20 .B CC_BEFORE Send to copy-carbon address only when a user has less than specified grace time left. Value is a number followed by a time unit. Known units are .IR seconds , .IR minutes , .IR hours ", and" .IR days . Example: .I 5 days .TP .B CC_TO An e-mail address to put into copy-carbon (CC:) recipient header. Default value is .IR root . .TP .B CHARSET Defines character set for sent e-mails. Default value will be current locale character set used when executing warnquota command, if locale is not either .I C or .IR POSIX . Otherwise no character set will be specified in the e-mails. .TP .B FROM Defines From: e-email address. Default value is .IR "support@localhost" . .TP .B GROUP_MESSAGE A text sent as an e-mail body if a group exceeds its limits. This option recognizes formatting sequences. .TP .B GROUP_SIGNATURE A signature text appended to notification for a group. Default value is a general explanation utilizing .B SUPPORT and .B PHONE values. This option recognizes formatting sequences. .TP .B LDAP_BASEDN Base distinguished name for LDAP queries. .TP .B LDAP_BINDDN Bind distinguished name for LDAP queries. .TP .B LDAP_BINDPW Bind password for LDAP queries. .TP .B LDAP_DEFAULT_MAIL_DOMAIN Default e-mail address domain of searched user if given LDAP attribute does not specify any. .TP .B LDAP_HOST LDAP server name to connect to if .B LDAP_URI is not defined. .TP .B LDAP_MAIL A boolean controlling if LDAP has to be used to look up user's e-mail address. Possible values are .I true and .IR false . Default value is .IR false . .TP .B LDAP_MAIL_ATTRIBUTE The LDAP attribute which holds user's e-mail address. .TP .B LDAP_PORT LDAP server port number to connect to if .B LDAP_URI is not defined. .TP .B LDAP_SEARCH_ATTRIBUTE The LDAP attribute which holds user's ID to look up. .TP .B LDAP_URI The URL of LDAP server to use to search user's e-mail addresses. This option takes preference over .B LDAP_HOST and .BR LDAP_PORT . Example: .I ldaps://example.com:389/ .TP .B MESSAGE A beginning of text sent as an e-mail body if a user exceeds his limits. This option recognizes formatting sequences. .TP .B MAIL_CMD The command to execute to send an e-mail. The e-mail text including all headers is passed to the standard input of the command. Default value is .IR "/usr/lib/sendmail -t" . .TP .B MAILDEV The device with disk quotas to exclude from sending notifications if there are exceeded limits. This option should identify the device where mail boxes are stored to prevent from bouncing the warnquota notification by local MDA due to no space for storing new e-mails. Special value .I any denotes all devices. .TP .B PHONE The telephone contact to the user support. Default value is .IR "(xxx) xxx-xxxx or (yyy) yyy-yyyy" . .TP .B SIGNATURE The end of e-mail body if a user exceeds its limits. Default value is a general explanation utilizing .B SUPPORT and .B PHONE values. This option recognizes formatting sequences. .TP .B SUBJECT The text to put into Subject: header. Default value is .IR "Disk Quota usage on system" . .TP .B SUPPORT The contact to the user support. Default value is .IR "support@localhost" . .SH EXAMPLE .PP # comment .RS 0 FROM = root@example.com .RS 0 SUPPORT = support@example.com .RS 0 PHONE = 1234 .SH FILES .PD 0 .TP 20 .B /etc/warnquota.conf configuration for .BR warnquota (8) .PD .SH SEE ALSO .BR warnquota (8). ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/xqmstats.8�������������������������������������������������������������������������������0000664�0000000�0000000�00000001124�14463210551�0014553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" 2004, Max Vozeler <max@hinterhof.net> .\" Released under the Gnu GPL .TH XQMSTATS 8 "April 2, 2004" "" "quota" .SH NAME .B xqmstats \- Display XFS quota manager statistics from /proc .SH SYNOPSIS .I /usr/sbin/xqmstats .SH DESCRIPTION .B xqmstat queries the kernel for the XFS Quota Manager dquot statistics. It displays: .P .PD 0 .RS 4 .IP \[bu] Reclaims .IP \[bu] Missed reclaims .IP \[bu] Dquot dups .IP \[bu] Cache misses .IP \[bu] Cache hits .IP \[bu] Dquot wants .IP \[bu] Shake reclaims .IP \[bu] Inact reclaims .RE .PD .SH OPTIONS None. .SH SEE ALSO .BR quotastats (1), .BR quota (1). ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.09/xqmstats.c�������������������������������������������������������������������������������0000664�0000000�0000000�00000003434�14463210551�0014634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Display XFS quota manager statistics from /proc. * Copyright (c) 2001-2003 Silicon Graphics, Inc. */ #include "config.h" #include <stdio.h> #include <unistd.h> #include <string.h> #include "common.h" #include "pot.h" #define XQMFILE "/proc/fs/xfs/xqm" #define STATFILE "/proc/fs/xfs/stat" #define XQMSTATS "/proc/fs/xfs/xqmstat" char *progname; int main(int argc, char **argv) { FILE *stats, *xqm; char buffer[256]; unsigned values[8]; gettexton(); progname = basename(argv[0]); memset(values, 0, sizeof(unsigned) * 8); if ((xqm = fopen(XQMFILE, "r")) == NULL) { errstr(_("The running kernel does not support XFS\n")); return 1; } if ((stats = fopen(XQMSTATS, "r")) == NULL) { if ((stats = fopen(STATFILE, "r")) == NULL) { errstr(_("The running kernel does not support XFS\n")); fclose(xqm); return 1; } } while (!feof(stats)) { fgets(buffer, 256, stats); if (sscanf(buffer, "qm %u %u %u %u %u %u %u %u\n", &values[0], &values[1], &values[2], &values[3], &values[4], &values[5], &values[6], &values[7]) == 8) break; } if (!feof(stats)) { printf(_("XFS Quota Manager dquot statistics\n")); printf(_(" reclaims: %u\n"), values[0]); printf(_(" missed reclaims: %u\n"), values[1]); printf(_(" dquot dups: %u\n"), values[2]); printf(_(" cache misses: %u\n"), values[3]); printf(_(" cache hits: %u\n"), values[4]); printf(_(" dquot wants: %u\n"), values[5]); printf(_(" shake reclaims: %u\n"), values[6]); printf(_(" inact reclaims: %u\n"), values[7]); } if (fscanf(xqm, "%u %u %u %u\n", &values[0], &values[1], &values[2], &values[3]) == 4) printf( _("Maximum %u dquots (currently %u incore, %u on freelist)\n"), values[0], values[1], values[3]); fclose(stats); fclose(xqm); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������