quota-4.03/0000755000175000001440000000000012635010613007563 500000000000000quota-4.03/quotagrpadmins.50000644000175000001440000000123712234034700012630 00000000000000.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.03/rquota.h0000644000175000001440000001265112513140325011173 00000000000000/* * Please do not edit this file. * It was generated using rpcgen. */ #ifndef _RQUOTA_H_RPCGEN #define _RQUOTA_H_RPCGEN #include #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.03/doc/0000755000175000001440000000000012635010613010330 500000000000000quota-4.03/doc/quotas-1.eps0000644000175000001440000055246212124521007012446 00000000000000%!PS-Adobe-3.0 EPSF-2.0 %%Creator: Windows PSCRIPT %%Title: PowerPoint - QUOTAS.PPT %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%Pages: 0 %%BeginResource: procset Win35Dict 3 1 %%BoundingBox: 10 13 832 577 %%EndComments %%BeginProcSet: epsffit 1 0 gsave 842.000 0.000 translate 90 rotate 1.000 1.000 scale %%EndProcSet /Win35Dict 290 dict def Win35Dict begin/bd{bind def}bind def/in{72 mul}bd/ed{exch def}bd/ld{load def}bd/tr/translate ld/gs/gsave ld/gr /grestore ld/M/moveto ld/L/lineto ld/rmt/rmoveto ld/rlt/rlineto ld /rct/rcurveto ld/st/stroke ld/n/newpath ld/sm/setmatrix ld/cm/currentmatrix ld/cp/closepath ld/ARC/arcn ld/TR{65536 div}bd/lj/setlinejoin ld/lc /setlinecap ld/ml/setmiterlimit ld/sl/setlinewidth ld/scignore false def/sc{scignore{pop pop pop}{0 index 2 index eq 2 index 4 index eq and{pop pop 255 div setgray}{3{255 div 3 1 roll}repeat setrgbcolor}ifelse}ifelse}bd /FC{bR bG bB sc}bd/fC{/bB ed/bG ed/bR ed}bd/HC{hR hG hB sc}bd/hC{ /hB ed/hG ed/hR ed}bd/PC{pR pG pB sc}bd/pC{/pB ed/pG ed/pR ed}bd/sM matrix def/PenW 1 def/iPen 5 def/mxF matrix def/mxE matrix def/mxUE matrix def/mxUF matrix def/fBE false def/iDevRes 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def/fPP false def/SS{fPP{ /SV save def}{gs}ifelse}bd/RS{fPP{SV restore}{gr}ifelse}bd/EJ{gsave showpage grestore}bd/#C{userdict begin/#copies ed end}bd/FEbuf 2 string def/FEglyph(G )def/FE{1 exch{dup 16 FEbuf cvrs FEglyph exch 1 exch putinterval 1 index exch FEglyph cvn put}for}bd/SM{/iRes ed/cyP ed /cxPg ed/cyM ed/cxM ed 72 100 div dup scale dup 0 ne{90 eq{cyM exch 0 eq{cxM exch tr -90 rotate -1 1 scale}{cxM cxPg add exch tr +90 rotate}ifelse}{cyP cyM sub exch 0 ne{cxM exch tr -90 rotate}{cxM cxPg add exch tr -90 rotate 1 -1 scale}ifelse}ifelse}{pop cyP cyM sub exch 0 ne{cxM cxPg add exch tr 180 rotate}{cxM exch tr 1 -1 scale}ifelse}ifelse 100 iRes div dup scale 0 0 transform .25 add round .25 sub exch .25 add round .25 sub exch itransform translate}bd/SJ{1 index 0 eq{pop pop/fBE false def}{1 index/Break ed div/dxBreak ed/fBE true def}ifelse}bd/ANSIVec[ 16#0/grave 16#1/acute 16#2/circumflex 16#3/tilde 16#4/macron 16#5/breve 16#6/dotaccent 16#7/dieresis 16#8/ring 16#9/cedilla 16#A/hungarumlaut 16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle 16#60/grave 16#7C/bar 16#82/quotesinglbase 16#83/florin 16#84/quotedblbase 16#85 /ellipsis 16#86/dagger 16#87/daggerdbl 16#88/circumflex 16#89/perthousand 16#8A/Scaron 16#8B/guilsinglleft 16#8C/OE 16#91/quoteleft 16#92/quoteright 16#93/quotedblleft 16#94/quotedblright 16#95/bullet 16#96/endash 16#97 /emdash 16#98/tilde 16#99/trademark 16#9A/scaron 16#9B/guilsinglright 16#9C/oe 16#9F/Ydieresis 16#A0/space 16#A1/exclamdown 16#A4/currency 16#A5/yen 16#A6/brokenbar 16#A7/section 16#A8/dieresis 16#A9/copyright 16#AA/ordfeminine 16#AB/guillemotleft 16#AC/logicalnot 16#AD/hyphen 16#AE/registered 16#AF/macron 16#B0/degree 16#B1/plusminus 16#B2/twosuperior 16#B3/threesuperior 16#B4/acute 16#B5/mu 16#B6/paragraph 16#B7/periodcentered 16#B8/cedilla 16#B9/onesuperior 16#BA/ordmasculine 16#BB/guillemotright 16#BC/onequarter 16#BD/onehalf 16#BE/threequarters 16#BF/questiondown 16#C0/Agrave 16#C1/Aacute 16#C2/Acircumflex 16#C3/Atilde 16#C4/Adieresis 16#C5/Aring 16#C6/AE 16#C7/Ccedilla 16#C8/Egrave 16#C9/Eacute 16#CA /Ecircumflex 16#CB/Edieresis 16#CC/Igrave 16#CD/Iacute 16#CE/Icircumflex 16#CF/Idieresis 16#D0/Eth 16#D1/Ntilde 16#D2/Ograve 16#D3/Oacute 16#D4 /Ocircumflex 16#D5/Otilde 16#D6/Odieresis 16#D7/multiply 16#D8/Oslash 16#D9/Ugrave 16#DA/Uacute 16#DB/Ucircumflex 16#DC/Udieresis 16#DD/Yacute 16#DE/Thorn 16#DF/germandbls 16#E0/agrave 16#E1/aacute 16#E2/acircumflex 16#E3/atilde 16#E4/adieresis 16#E5/aring 16#E6/ae 16#E7/ccedilla 16#E8 /egrave 16#E9/eacute 16#EA/ecircumflex 16#EB/edieresis 16#EC/igrave 16#ED/iacute 16#EE/icircumflex 16#EF/idieresis 16#F0/eth 16#F1/ntilde 16#F2/ograve 16#F3/oacute 16#F4/ocircumflex 16#F5/otilde 16#F6/odieresis 16#F7/divide 16#F8/oslash 16#F9/ugrave 16#FA/uacute 16#FB/ucircumflex 16#FC/udieresis 16#FD/yacute 16#FE/thorn 16#FF/ydieresis ] def/reencdict 12 dict def/IsChar{basefontdict/CharStrings get exch known}bd/MapCh{dup IsChar not{pop/bullet}if newfont/Encoding get 3 1 roll put}bd/MapDegree{16#b0 /degree IsChar{/degree}{/ring}ifelse MapCh}bd/MapBB{16#a6/brokenbar IsChar{/brokenbar}{/bar}ifelse MapCh}bd/ANSIFont{reencdict begin/newfontname ed/basefontname ed FontDirectory newfontname known not{/basefontdict basefontname findfont def/newfont basefontdict maxlength dict def basefontdict{exch dup/FID ne{dup/Encoding eq{exch dup length array copy newfont 3 1 roll put}{exch newfont 3 1 roll put}ifelse}{pop pop}ifelse}forall newfont /FontName newfontname put 127 1 159{newfont/Encoding get exch/bullet put}for ANSIVec aload pop ANSIVec length 2 idiv{MapCh}repeat MapDegree MapBB newfontname newfont definefont pop}if newfontname end}bd/SB{FC /ULlen ed/str ed str length fBE not{dup 1 gt{1 sub}if}if/cbStr ed /dxGdi ed/y0 ed/x0 ed str stringwidth dup 0 ne{/y1 ed/x1 ed y1 y1 mul x1 x1 mul add sqrt dxGdi exch div 1 sub dup x1 mul cbStr div exch y1 mul cbStr div}{exch abs neg dxGdi add cbStr div exch}ifelse/dyExtra ed/dxExtra ed x0 y0 M fBE{dxBreak 0 BCh dxExtra dyExtra str awidthshow}{dxExtra dyExtra str ashow}ifelse fUL{x0 y0 M dxUL dyUL rmt ULlen fBE{Break add}if 0 mxUE transform gs rlt cyUL sl [] 0 setdash st gr}if fSO{x0 y0 M dxSO dySO rmt ULlen fBE{Break add}if 0 mxUE transform gs rlt cyUL sl [] 0 setdash st gr}if n/fBE false def}bd/font{/name ed/Ascent ed 0 ne/fT3 ed 0 ne/fSO ed 0 ne/fUL ed/Sy ed/Sx ed 10.0 div/ori ed -10.0 div/esc ed/BCh ed name findfont/xAscent 0 def/yAscent Ascent def/ULesc esc def ULesc mxUE rotate pop fT3{/esc 0 def xAscent yAscent mxUE transform /yAscent ed/xAscent ed}if [Sx 0 0 Sy neg xAscent yAscent] esc mxE rotate mxF concatmatrix makefont setfont [Sx 0 0 Sy neg 0 Ascent] mxUE mxUF concatmatrix pop fUL{currentfont dup/FontInfo get/UnderlinePosition known not{pop/Courier findfont}if/FontInfo get/UnderlinePosition get 1000 div 0 exch mxUF transform/dyUL ed/dxUL ed}if fSO{0 .3 mxUF transform /dySO ed/dxSO ed}if fUL fSO or{currentfont dup/FontInfo get/UnderlineThickness known not{pop/Courier findfont}if/FontInfo get/UnderlineThickness get 1000 div Sy mul/cyUL ed}if}bd/min{2 copy gt{exch}if pop}bd/max{2 copy lt{exch}if pop}bd/CP{/ft ed{{ft 0 eq{clip}{eoclip}ifelse}stopped{currentflat 1 add setflat}{exit}ifelse}loop}bd/patfont 10 dict def patfont begin /FontType 3 def/FontMatrix [1 0 0 -1 0 0] def/FontBBox [0 0 16 16] def/Encoding StandardEncoding def/BuildChar{pop pop 16 0 0 0 16 16 setcachedevice 16 16 false [1 0 0 1 .25 .25]{pat}imagemask}bd end/p{ /pat 32 string def{}forall 0 1 7{dup 2 mul pat exch 3 index put dup 2 mul 1 add pat exch 3 index put dup 2 mul 16 add pat exch 3 index put 2 mul 17 add pat exch 2 index put pop}for}bd/pfill{/PatFont patfont definefont setfont/ch(AAAA)def X0 64 X1{Y1 -16 Y0{1 index exch M ch show}for pop}for}bd/vert{X0 w X1{dup Y0 M Y1 L st}for}bd/horz{Y0 w Y1{dup X0 exch M X1 exch L st}for}bd/fdiag{X0 w X1{Y0 M X1 X0 sub dup rlt st}for Y0 w Y1{X0 exch M Y1 Y0 sub dup rlt st}for}bd/bdiag{X0 w X1{Y1 M X1 X0 sub dup neg rlt st}for Y0 w Y1{X0 exch M Y1 Y0 sub dup neg rlt st}for}bd/AU{1 add cvi 15 or}bd/AD{1 sub cvi -16 and}bd/SHR{pathbbox AU/Y1 ed AU/X1 ed AD/Y0 ed AD/X0 ed}bd/hfill{/w iRes 37.5 div round def 0.1 sl [] 0 setdash n dup 0 eq{horz}if dup 1 eq{vert}if dup 2 eq{fdiag}if dup 3 eq{bdiag}if dup 4 eq{horz vert}if 5 eq{fdiag bdiag}if}bd/F{/ft ed fm 256 and 0 ne{gs FC ft 0 eq{fill}{eofill}ifelse gr}if fm 1536 and 0 ne{SHR gs HC ft CP fm 1024 and 0 ne{/Tmp save def pfill Tmp restore}{fm 15 and hfill}ifelse gr}if}bd/S{PenW sl PC st}bd/m matrix def/GW{iRes 12 div PenW add cvi}bd/DoW{iRes 50 div PenW add cvi}bd/DW{iRes 8 div PenW add cvi}bd/SP{/PenW ed/iPen ed iPen 0 eq iPen 6 eq or{[] 0 setdash}if iPen 1 eq{[DW GW] 0 setdash}if iPen 2 eq{[DoW GW] 0 setdash}if iPen 3 eq{[DW GW DoW GW] 0 setdash}if iPen 4 eq{[DW GW DoW GW DoW GW] 0 setdash}if}bd/E{m cm pop tr scale 1 0 moveto 0 0 1 0 360 arc cp m sm}bd /AG{/sy ed/sx ed sx div 4 1 roll sy div 4 1 roll sx div 4 1 roll sy div 4 1 roll atan/a2 ed atan/a1 ed sx sy scale a1 a2 ARC}def/A{m cm pop tr AG m sm}def/P{m cm pop tr 0 0 M AG cp m sm}def/RRect{n 4 copy M 3 1 roll exch L 4 2 roll L L cp}bd/RRCC{/r ed/y1 ed/x1 ed/y0 ed/x0 ed x0 x1 add 2 div y0 M x1 y0 x1 y1 r arcto 4{pop}repeat x1 y1 x0 y1 r arcto 4{pop}repeat x0 y1 x0 y0 r arcto 4{pop}repeat x0 y0 x1 y0 r arcto 4{pop}repeat cp}bd/RR{2 copy 0 eq exch 0 eq or{pop pop RRect}{2 copy eq{pop RRCC}{m cm pop/y2 ed/x2 ed/ys y2 x2 div 1 max def/xs x2 y2 div 1 max def/y1 exch ys div def/x1 exch xs div def/y0 exch ys div def/x0 exch xs div def/r2 x2 y2 min def xs ys scale x0 x1 add 2 div y0 M x1 y0 x1 y1 r2 arcto 4{pop}repeat x1 y1 x0 y1 r2 arcto 4{pop}repeat x0 y1 x0 y0 r2 arcto 4{pop}repeat x0 y0 x1 y0 r2 arcto 4{pop}repeat m sm cp}ifelse}ifelse}bd/PP{{rlt}repeat}bd/OB{gs 0 ne{7 3 roll/y ed /x ed x y translate ULesc rotate x neg y neg translate x y 7 -3 roll}if sc B fill gr}bd/B{M/dy ed/dx ed dx 0 rlt 0 dy rlt dx neg 0 rlt cp}bd /CB{B clip n}bd/ErrHandler{errordict dup maxlength exch length gt dup{errordict begin}if/errhelpdict 12 dict def errhelpdict begin/stackunderflow(operand stack underflow)def /undefined(this name is not defined in a dictionary)def/VMerror(you have used up all the printer's memory)def /typecheck(operator was expecting a different type of operand)def /ioerror(input/output error occured)def end{end}if errordict begin /handleerror{$error begin newerror{/newerror false def showpage 72 72 scale/x .25 def/y 9.6 def/Helvetica findfont .2 scalefont setfont x y moveto(Offending Command = )show/command load{dup type/stringtype ne{(max err string)cvs}if show}exec/y y .2 sub def x y moveto(Error = )show errorname{dup type dup( max err string )cvs show( : )show/stringtype ne{( max err string )cvs}if show}exec errordict begin errhelpdict errorname known{x 1 add y .2 sub moveto errhelpdict errorname get show}if end /y y .4 sub def x y moveto(Stack =)show ostack{/y y .2 sub def x 1 add y moveto dup type/stringtype ne{( max err string )cvs}if show}forall showpage}if end}def end}bd end %%EndResource /SVDoc save def %%EndProlog %%BeginSetup Win35Dict begin ErrHandler %%EndSetup SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr %%BeginResource: font MSTT31c1bc /GreNewFont{10 dict dup 3 1 roll def dup begin 6 1 roll/FontType 3 def/FontMatrix exch def/FontBBox exch def/FontInfo 2 dict def FontInfo /UnderlinePosition 3 -1 roll put FontInfo/UnderlineThickness 3 -1 roll put/Encoding 256 array def 0 1 255{Encoding exch/.notdef put}for /CharProcs 256 dict def CharProcs/.notdef{}put/Metrics 256 dict def Metrics/.notdef 3 -1 roll put/BuildChar{/char exch def/fontdict exch def/charname fontdict/Encoding get char get def fontdict/Metrics get charname get aload pop setcachedevice fontdict begin Encoding char get CharProcs exch get end exec}def end definefont pop}def/AddChar{begin Encoding 3 1 roll put CharProcs 3 1 roll put Metrics 3 1 roll put end}def /MSTT31c1bc [58.0 0 0 0 0 0] 51 -102 [-58.0 -58.0 58.0 58.0] [1 58 div 0 0 1 58 div 0 0] /MSTT31c1bc GreNewFont %%EndResource 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font %%BeginResource: font MSTT31c1bc /G54 [35.0 0.0 2.0 0.0 33.0 39.0] /G54 { 31 39 true [1 0 0 -1 -2.0 39.0] {} imagemask } 84 /G54 MSTT31c1bc AddChar /G68 [28.0 0.0 0.0 0.0 28.0 41.0] /G68 { 28 41 true [1 0 0 -1 0.0 41.0] {<038000000f8000007f800000ff8000000f8000000f8000000f8000000f8000000f8000000f800000 0f8000000f8000000f8000000f8000000f81f0000f87f8000f8ffc000f987e000fa03e000fc03f00 0f801f000f801f000f801f000f801f000f801f000f801f000f801f000f801f000f801f000f801f00 0f801f000f801f000f801f000f801f000f801f000f801f000f801f000f801f000f801f001fc03f80 fff9fff0>} imagemask } 104 /G68 MSTT31c1bc AddChar /G69 [15.0 0.0 1.0 0.0 14.0 41.0] /G69 { 13 41 true [1 0 0 -1 -1.0 41.0] {<038007c007c007c0038000000000000000000000000000000000000003800f807f80ff800f800f80 0f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f801fc0 fff8>} imagemask } 105 /G69 MSTT31c1bc AddChar /G72 [19.0 0.0 0.0 0.0 19.0 27.0] /G72 { 19 27 true [1 0 0 -1 0.0 27.0] {<0187c00f8fe07f9fe0ffb3e00fe1c00fc0000fc0000f80000f80000f80000f80000f80000f80000f 80000f80000f80000f80000f80000f80000f80000f80000f80000f80000f80000fc0001fe000fff8 00>} imagemask } 114 /G72 MSTT31c1bc AddChar /G64 [29.0 0.0 2.0 -1.0 29.0 41.0] /G64 { 27 42 true [1 0 0 -1 -2.0 41.0] {<00000e0000003e000001fe000003fe0000003e0000003e0000003e0000003e0000003e0000003e00 00003e0000003e0000003e0000003e00007e3e0001ffbe0003c3fe000f00fe000e007e001e007e00 3c007e003c003e007c003e0078003e0078003e00f8003e00f8003e00f8003e00f8003e00f8003e00 f8003e00f8003e00fc003e007c003e007e003e007e003e003f007e003f80fe001fe1bfe00fffbfc0 03fe3e0000f83800>} imagemask } 100 /G64 MSTT31c1bc AddChar /G20 [15.0 0.0 0.0 0.0 0.0 0.0] /G20 { } 32 /G20 MSTT31c1bc AddChar /G49 [19.0 0.0 1.0 0.0 18.0 39.0] /G49 { 17 39 true [1 0 0 -1 -1.0 39.0] {} imagemask } 73 /G49 MSTT31c1bc AddChar /G6e [28.0 0.0 0.0 0.0 28.0 27.0] /G6e { 28 27 true [1 0 0 -1 0.0 27.0] {<0381f0000f87fc007f8ffc00ff987e000fa03e000fc03f000f801f000f801f000f801f000f801f00 0f801f000f801f000f801f000f801f000f801f000f801f000f801f000f801f000f801f000f801f00 0f801f000f801f000f801f000f801f000f801f001fc03f80fff9fff0>} imagemask } 110 /G6e MSTT31c1bc AddChar /G74 [16.0 0.0 0.0 -1.0 16.0 35.0] /G74 { 16 36 true [1 0 0 -1 0.0 35.0] {<0080018001800380038007800f801f803f807ffefffe0f800f800f800f800f800f800f800f800f80 0f800f800f800f800f800f800f800f800f800f800f800f810fc207fc03f801f0>} imagemask } 116 /G74 MSTT31c1bc AddChar /G65 [26.0 0.0 2.0 -1.0 24.0 27.0] /G65 { 22 28 true [1 0 0 -1 -2.0 27.0] {<00fe0003ff80070fe00e03f01c01f03801f83800f87000fc7000fc7ffffcfffffcf00000f00000f0 0000f00000f80000f80000f80004fc000c7e000c7f00187f80383fe0f01ffff00fffe007ffc003ff 8000fc00>} imagemask } 101 /G65 MSTT31c1bc AddChar /G61 [26.0 0.0 2.0 -1.0 26.0 27.0] /G61 { 24 28 true [1 0 0 -1 -2.0 27.0] {<01fe000fff801f0fc03c03e07c03f07c01f07c01f07c01f03801f00001f00003f0001ff0007df003 e1f00781f01f01f03e01f07c01f07801f0f801f0f801f0f801f0fc03f0fc07f17e1df37ff9fe3fe1 fc0f80f0>} imagemask } 97 /G61 MSTT31c1bc AddChar /G6f [29.0 0.0 2.0 -1.0 27.0 27.0] /G6f { 25 28 true [1 0 0 -1 -2.0 27.0] {<007f000001ffc0000783f0000f00f8001e007c001c007e003c003e003c003f0078001f0078001f00 f8001f80f8000f80f8000f80f8000f80f8000f80f8000f80f8000f80fc000f007c000f007c000f00 7e000e003e001e003f001c001f003c000f80780007e0f00003ffc000007f0000>} imagemask } 111 /G6f MSTT31c1bc AddChar /G6c [15.0 0.0 1.0 0.0 14.0 41.0] /G6c { 13 41 true [1 0 0 -1 -1.0 41.0] {<03800f807f80ff800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f80 0f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f801fc0 fff8>} imagemask } 108 /G6c MSTT31c1bc AddChar /G4c [34.0 0.0 0.0 0.0 33.0 39.0] /G4c { 33 39 true [1 0 0 -1 0.0 39.0] {} imagemask } 76 /G4c MSTT31c1bc AddChar /G75 [28.0 0.0 0.0 -1.0 28.0 26.0] /G75 { 28 27 true [1 0 0 -1 0.0 26.0] {} imagemask } 117 /G75 MSTT31c1bc AddChar /G78 [28.0 0.0 0.0 0.0 28.0 26.0] /G78 { 28 26 true [1 0 0 -1 0.0 26.0] {} imagemask } 120 /G78 MSTT31c1bc AddChar /G43 [39.0 0.0 2.0 -1.0 37.0 40.0] /G43 { 35 41 true [1 0 0 -1 -2.0 40.0] {<0001ff0080000ffff180003f00ff80007c003f8001f0000f8003e000078007c00003c00f800001c0 0f800001c01f000000c01f000000c03e000000c03e000000407e000000007e000000007c00000000 fc00000000fc00000000fc00000000fc00000000fc00000000fc00000000fc00000000fc00000000 fc00000000fc000000007e000000007e000000007e000000003f000000003f000000201f80000040 1f800000c00fc000018007e000030007f000060003fc001c0000ff807800007ffff000001fffc000 0003fe0000>} imagemask } 67 /G43 MSTT31c1bc AddChar /G66 [18.0 0.0 1.0 0.0 24.0 41.0] /G66 { 23 41 true [1 0 0 -1 -1.0 41.0] {<0007e0003ff80070fc00e07e01e03e01c03e03c01c03c00003c00007c00007c00007c00007c00007 c00007c000ffff80ffff8007c00007c00007c00007c00007c00007c00007c00007c00007c00007c0 0007c00007c00007c00007c00007c00007c00007c00007c00007c00007c00007c0000fe0001ff000 ffff00>} imagemask } 102 /G66 MSTT31c1bc AddChar /G63 [26.0 0.0 2.0 -1.0 24.0 27.0] /G63 { 22 28 true [1 0 0 -1 -2.0 27.0] {<007f0001ffc00783e00f01f01e01f03c01f83c00f87c00f8780070780000f80000f80000f80000f8 0000f80000fc0000fc0004fc000cfe000c7e00087f00183f80383fe0f01fffe00fffe007ffc003ff 0000fc00>} imagemask } 99 /G63 MSTT31c1bc AddChar /G2d [19.0 0.0 2.0 11.0 17.0 16.0] /G2d { 15 5 true [1 0 0 -1 -2.0 16.0] {} imagemask } 45 /G2d MSTT31c1bc AddChar /G42 [38.0 0.0 0.0 0.0 35.0 39.0] /G42 { 35 39 true [1 0 0 -1 0.0 39.0] {} imagemask } 66 /G42 MSTT31c1bc AddChar /G4d [52.0 0.0 0.0 0.0 52.0 39.0] /G4d { 52 39 true [1 0 0 -1 0.0 39.0] {} imagemask } 77 /G4d MSTT31c1bc AddChar /G79 [28.0 0.0 0.0 -12.0 28.0 26.0] /G79 { 28 38 true [1 0 0 -1 0.0 26.0] {} imagemask } 121 /G79 MSTT31c1bc AddChar /G39 [29.0 0.0 2.0 0.0 26.0 40.0] /G39 { 24 40 true [1 0 0 -1 -2.0 40.0] {<007e0003ff800783c00f01f01e00f03c00783c007c78003c78003e78003ef8001ef8001ff8001ff8 001ff8001ff8001ffc001f7c001f7c001f7e003f3e003f1f007e0fc3fe07ff7e01f87c00007c0000 fc0000f80001f00001f00003e00007c00007c0000f80001f00003c0000780001e00007c0007e0000 >} imagemask } 57 /G39 MSTT31c1bc AddChar /G36 [29.0 0.0 2.0 0.0 26.0 40.0] /G36 { 24 40 true [1 0 0 -1 -2.0 40.0] {<00003e0003f0000f80001e00003c0000f80001f00001e00003c00007c0000f80000f80001f00003f 00003e00003e1f807effe07f83f07e00f8fc00fcfc007efc003ef8003ef8003ff8001ff8001ff800 1ff8001ff8001f78001f7c001e7c001e3c001e3e003c1e003c0f00780f80f007c1e001ffc0007e00 >} imagemask } 54 /G36 MSTT31c1bc AddChar %%EndResource 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB %%BeginResource: font MSTT31c1bc /G31 [29.0 0.0 6.0 0.0 22.0 40.0] /G31 { 16 40 true [1 0 0 -1 -6.0 40.0] {<006003e00fe07fe0c7e003e003e003e003e003e003e003e003e003e003e003e003e003e003e003e0 03e003e003e003e003e003e003e003e003e003e003e003e003e003e003e003e003e003e007f07fff >} imagemask } 49 /G31 MSTT31c1bc AddChar %%EndResource 2919 2191 29 (1) 29 SB %%BeginResource: font MSTT31c1c9 11 dict begin /FontInfo 8 dict dup begin /FullName (MSTT31c1c9) def /FamilyName (MSTT31c1c9) def /Weight (Normal) def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -109 def /UnderlineThickness 49 def end def /FontName /MSTT31c1c9 def /PaintType 0 def /FontType 1 def /FontMatrix [1 2048 div 0 0 1 2048 div 0 0] def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put } for 30 255 FE def /FontBBox { 0 0 0 0 } def currentdict end currentfile eexec 9e67edc6f3ddb54d987dfb0ad4392351758038a4ddcd7496126caebf3c4b776a9348fe88419c70c199dfed3be58c5559d44f85ed1b3b2d48c178aedfd3de0022 1e04c6d4d0f48db1093382653d5c4a389b722bcd118482d76f60847858ee2b7fec8602e8fe84654d4a23e6e5b0a6a07705c6bdece2812668fa8d0c1c49883c1f ed5ef1fdceb49b11bd5c332ead97409150c8af0e5e03714ae6a229de223eb4d5df5f7ab0118978c08a67ebecb1283fb8e39fb2db8e5600d202b2909bfbdaa269 abe5b36800302965c990a082835f3ac6efc9d64fe188cac4bb439c5f84ad8b5731ddb08c0b1aace01863a3d07f18d467b74f78e9d59d6f8dbb3c02ff1f33e752 fcafa6b90648c821a1c6a6996ce5ab2f5507fbd175bf3a4b32a289ea31054444a2d44fcbaf008e1127661229de7dc37108848f4e9d4faf147cc1e00ac8048f85 d0c3563f9385d8e93c91dc7fc9631ce01da924ff3d51539c2e089feace7a3708e9d2522cd0c4d5cdce2bbeccd30fdee2b9e98a6f99b1f22257b7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource 32 0 0 167 167 0 0 0 150 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d07d79b775d66db7f06b827e8ff4a2eb8a86a8433f9bba3a08ac51527ba66676ba5e87a8c35863c1d300d30244be0d12343c25ffa 9f4d05d39ff23460fb3d423dc49c437f6bb9da6732dfcaf8d49f73ecfd0a2cea4b81f4830b5a5141dba90708e5b839ec4995bd45e8afeb94764a0f8aa57ef193 428bbd3ae615cf958f6d9d734c885a4f29abf4504548ac5a355cb17006a16fdb9408bc90b2dfd2fc1387d824f1debaaa3987bd287feff105b69d7fe93ef6883b e0af2d2940ca07eb27030f4c14a8450cb52a98ce2500efd110cd8b3ea886053ead9bd5cacec38b807b3fbc94030f664f10b682be9a44509ba251515def870572 1d26ca3aad2c32bebc5ccee3d18d95267bb565a655cd5ed0ab3a9e405c3eea95f233c357933db74f3a38eee1d08bf0b21ffe1aeacb490e977f4f7584539a1e19 4c07b8d2e7dbfda90a5904ba54699c108acf1ba19892f8355e4d24639459b4518615fbee2122d9da66f42615386f5ee7925da010effed50b528057fd8f814b55 b0de7c96c8b2ba89688fc49900ed140cf762bcaab025e4c5238166ea7ee7dac63774dcd1273a5519476b9de552f327588cbd15028562b1f2865acfa2f4ebe964 15a7797feebc4a244649f27c987a80aac7dfdcb83ded53f98f579846d252ed9ca464e3e02d4d2ca61e0d7ac74b4d21c7b8e8dea84c3190c121b9120a9db2c539 870be51291b34f801213611c24aa6f704d5c7aa827802af2fede4901f3a5e40c50ee8995745bd2a1fab16b1c3968bfa2454a9f8990036151d9464cddcefe41a1 9b8bff464e2cf751d3968de0bba7336103fa2be945c74230c360d195a77173fe9e8c90e89ff0908f11381f5ccc9913be734b95d922dfd7a24cce2c2dfee3c400 eefe54dfe3c5262449debb38fe06d6356cbdc79a707677a9ee854c5fa7a372def6fe9a1fd6fce94f3c73bff36a3e9886953c29dad84b51a55fb29e4aee39bb61 aa4ee7727b9be20c1dd95828f1e7beb4c63ce43c5c4b5857c8abe1ed4cea10208d1a8bc832e19d32f8ebf5717ac9ba4c99d4607754d5d16229304ba1efa37632 e6733c0bb38d5b9bac4cda3d111425156fb5da060eef679fd02e5db0aa3ebd42e68485b3835fb33095460cb3d7d33379c65fff26a3972f4eada94b1ccb8b0c53 9b1a1ed9af028bb2e4aa9a9bbf4eac5ef0ef30c99a07766731df7a7d2cbc2aeba8e813d13f1806b733882dde18d76be093cc4127073081b7f3df1a8b6e40ec83 506bb12716c247508084301940a874e192125fae70e15e423796cb9e35d45660ddc4e87a78ca22970105b6bb49ccb7e0f25ebd728af622d7298a0816dc6b6767 3bd4c6c11960cc1a258149bc8bf078c023a283f1479157b66365c4adc8cf9521e696a13ae71466faa926191c6005bcd33075dd7c6cb07c0b822b1262c5cf767e 1b296056976de0d0b744b6f540de9901670a590010ab28d5b2ee9f3c667bb1b76e4ba590daf4029f6829e146ac4293464b19833a2cf1a7c794c73e64f7c82ad1 a5c1a0fb6f29d70df2201744772878fede649d7a444d479c786009b0b3221fe4c62665daf8ad8b7a160ecd05eeaed8bf1532c13a01467fcd2d95a05e681e1e52 469bab6485b3d5b2d069d189f051c76a04b3ceed83b0a0f37ffdd8e92698e24ddd12a5b2dd3c9a6fd8db0d5a47629dbb5279a611383b087c971638aec6aa56e0 84a83ef5589a664941c82ccafaa198c874e85892e67fc685e2a939485e57df8473b7e53cf97f03f2b666dac319895f02b1f167b74f12fcb7104eae01b10c1320 de826cd4dc760ee59113ec742a7d74ce5c4f9741d3cb13fedadcb71067ad820f92e2b4aa5539707fe3cd6060993ab0d9c95ea8d8349e2fbfde8a05ac7e6fe34c 1dadb4a14df7166de443467a39c7741ae9e1a59cbdf8733cfd5b64bfbf12d37ef50f4a9a765c7bf87079b046828793a5792193fd8985393a9db373c0650306e8 4ef33c82937580b036eee02ebeea82c84c58552f7c52cf0ef43814cc1b1e9e8908d1150e5d7bbf2ce0e8ac497b04bd310ffdeb76b2d94e3c0a797cab4a992de6 5858c95ceee596507da6b0896517a13778d028831e02b3059ae80a479f8e0d6a3763b402ed8286329f95ab006611b5fc7502f32e093751cd6bfe3e564078ca23 504db2e91efa9dee56ac9c1a17a682e99ee9e36221d506fb0a1fc3fb5fb0521cc99b2d4c2d22f284d9cc0aea65a937b7424cc62e4e3815722400a3b8cb0058e6 695fe0bca7b6d947c89570772e9367bbed7bd86c1c819cfc45d76fe8a6d39edc9d70dd1ffe266ac48c1ea72be9d36850b07cd1ddbedac72d40440cd40808ef58 cf76954afc94cb71c25297234464c94eed023e49e3f6613f506fab97213a3281cb6a0b58157c6077edf84624eb9c79526ace10116d095e349a71f249d2559c8b a3b9377d49adc86e27abc0b12c70b8c962ae344c791241359e09504dbe3948b70f5a3e4874b9f0c7824d7fa22db2b93877b31cb9f71df8472fcd23ac7dc46e21 4aafcfd8d41b80a9d027553a457199ff15ac580547d4db485c7750bddffad0d26fe90668afc59c612d9f4e388c676628118a1d2f977c70a6cb046c710437ce20 b06af40524ad07e6b40d324e8d6964ab15ea9d6e745f1db5b7b194bfe0f08bc7310a9c41d79e8a34279f5c84988ccd53ad2aa17d82b8c1162e250ec3dadd48b4 cabb848b84a64d587304eccc885e417a751a3bacdecd49e24163025611497d8734737194a45846f47fbaefe6be519819ba35a562d99808821ced8fc5f8870a03 22d2015aafcb05ef5c0218cc61802c75cffef07165b98f9c72c0b8c2c09e6302f20465501c66cec8588351b7ebda0309015ef4bcbb1ec92ff2e76cb4a7615ab1 6495f73631dbfb0c2c4bcd7a0d391cadb9d395e5b9d05a60f16b13317778c03dbd5e9549351f9544ce546f4fe065fe1293fbda5107f133552c0deba970cd47da 9add288cdc884129e8c2f41c96b86955072370a13739df1d8571fde3d2841319c711ad53724cd1f8c5fb5f310d03ac8d8d68e98069a6792f9abf33c32a45dc0f 83c4e02542af6b57ac09d4af238e63458802a95a462241c14139a475335bbe2bde73af860d7dbcf475ff6f35a3e1899a4a4d5085c590c05c84dcf4f35df534a0 8d1736481a0d22a4408c3ca996e127547352788a7a8b4059fb4f22c8c215c64ac947d46fcc1ab3f87fd3f77040e93630a48ff52ea5c4687d7ab4afb6974a4b3e d53004e6584a3c3d0a5521180ecebd0f3eceabd76cc46136e7ced8aef737a883422e8e2557c67d46acb63ca2dfc0a9772cbc9f5a6472d2a1395b587b8859ee4e a41566f7709a78c314e257cf06b1f0d8dffa2116727132af174ea3cbfe255f0ccae43b587f9d9274b4e62d060253327df4ca4f12acaf7e5c7ad603aa44563b1c 2d1073112be1696a9e3bc20d1b06a80dec85b944dc2992cc1e069ee2488f720fa1eaca5e5be9b13870b5a139fdfe917672c78c320594d9a38ef66f00458d5b70 fad00e5cd296b83df525bc52c14ae625c68cdf9e446ff9ec912b3861d0e6ad408342785b3990afa28877887739420cc3414b0ffbf53e444add20541b0e6e1e86 32e8cf6ebf640ff1152d1d1bc42df59e4deeee02be60841901a9ca18e811e29c0105034aa87d9359342d6cd08240fbca3ff1ba7e79a70d64c8af8fbb29346a62 15fa6beab840a28b746462a12e2ea63683079e1ae67db3dd20f55543706eb784875a308ab44ad82eb34dda904501ba6e6798030941545b7515a9457ee6bf926f 247d11735f995c242801c480afd57d7b79ae00c159613807e6280f7f370b3929de9d 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -3 1 SJ 851 796 1387 (Quotas Management) 1387 SB %%BeginResource: font MSTT31c1d6 11 dict begin /FontInfo 8 dict dup begin /FullName (MSTT31c1d6) def /FamilyName (MSTT31c1d6) def /Weight (Normal) def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -109 def /UnderlineThickness 49 def end def /FontName /MSTT31c1d6 def /PaintType 0 def /FontType 1 def /FontMatrix [1 2048 div 0 0 1 2048 div 0 0] def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put } for 30 255 FE def /FontBBox { 0 0 0 0 } def currentdict end currentfile eexec 9e67edc6f3ddb54d987dfb0ad4392351758038a4ddcd7496126caebf3c4b776a9348fe88419c70c199dfed3be58c5559d44f85ed1b3b2d48c178aedfd3de0022 1e04c6d4d0f48db1093382653d5c4a389b722bcd118482d76f60847858ee2b7fec8602e8fe84654d4a23e6e5b0a6a07705c6bdece2812668fa8d0c1c49883c1f ed5ef1fdceb49b11bd5c332ead97409150c8af0e5e03714ae6a229de223eb4d5df5f7ab0118978c08a67ebecb1283fb8e39fb2db8e5600d202b2909bfbdaa269 abe5b36800302965c990a082835f3ac6efc9d64fe188cac4bb439c5f84ad8b5731ddb08c0b1aace01863a3d07f18d467b74f78e9d59d6f8dbb3c02ff1f33e752 fcafa6b90648c821a1c6a6996ce5ab2f5507fbd175bf3a4b32a289ea31054444a2d44fcbaf008e1127661229de7dc37108848f4e9d4faf147cc1e00ac8048f85 d0c3563f9385d8e93c91dc7fc9631ce01da924ff3d51539c2e089feace7a3708e9d2522cd0c4d5cdce2bbeccd30fdee2b9e98a6f99b1f22257b7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource 32 0 0 150 150 0 0 0 134 /MSTT31c1d6 font %%BeginResource: font MSTT31c1d6 currentfile eexec 9e67edc6b858a3e762244b628fb01cf58f07fd3c01ea854585188a66a8f12aa17a95328b3ac7a563452355cdf678c51a4bd3287a046903abe9db4db7daee86d4 aee44d97fdc85665066b373c0792e435f219551d1b381c469ea92e4ab34b9cf795f06a025e57d038642fbb46bf3d97ce665b4953318c1a4d0b1e84550ff76556 5e97303458a9a8c72b9c1c85a1f761b3fafb37f172c6d3e4df174826bc2941e412e5cb3ed4d0ac348381fe6d1c11d07f669981e211812e3ebeffb1906914748d fbeae9ad08622df9c8908991684159d0842814d75741ba962c8dad83e6181fd23644266c2302745f433b949d1695beda980a6c47e997fcf53026e9b40af29b0d 3ea5f5d4a6e9f971d4418b4055584386c498cafe2148f3ac9ae0c79b7fba7e0959e48e2c6a8383995003ec2b90f602f46626f3374925d020c0405bf51ce9eec5 ce9343477b8c2736bd6894ce1bbbbe9beb6101d80b1f4f63d63334c4045c2426596e994ffe3c36fa7f3adaa39b3ef93106dd774c7f270779a898aa66754f5c52 690bdae6a204aa4f61efef8f2bb9a72584fc8fc81ee62e3e42378e83753bea564c275fb3662ad1e72ca1623d304c711c7aacc6cea03d6cc24827b0f37dcf82e9 67362aa9fdd3c5cde7b4ab202acf0a05decf30ab4a5fa2edee73e0e2848351e6e06eeb9bba82744b1a47738896af84b6bf490c479c601f2e6d3abf792667ec4d 17218121218e67ce24323878a663fba773d8460438b0331f727aed6fb7582efafaabebb282ea590ea3af5e1ad02738272586c5de9f881a56b61942fee714f11e bae04cb115f5f2f69c0ab4ff07faae9d4e7b4ddc6c97cbe0a93c1650f2bd05b6f7363fc395fa7dce160c201534acb0b0c3a5a144d3971aea6a854aba5a70086d 30f20e07a2b7e06e26183c04d88a5de3bca7b245dc79481e693fe24a0d2fc1b5157d9be970905cac9b3cb683f12795e54110b3f8af334b3e2d43689e87a43879 a0ec0140016e5bf0b954f785adf177e1ddaee7154bd37c9c7814c5d75fde747357e83de8384d06323a2d39654585e6e914bc35b5ecb1fd8c7ab08174de73c86c 5f809a35103df8eddee503cd9d93729ce4cde2e7f70da6bf42f74762ac997262e15bcc4de700145c8950ee8b6a191a6f11b58431edbbe9e6a553ae4c18151cc7 3137547830daa00df1c47932e85eb2f047e0d26494711f2b3c2069038ce66c1b83fe2e78dacc09599e1d2e6a403b3638a44661461595f7d39486a0c580781dbd edca70b836e6c4a8003ca70bf2e0528bfa27930c6e54aa458f670ee710ac0e6e06e66dd45c2e6de096ab627509091c5366773a42041bebdeac5fc8e187097288 1fd06cbb241c402036a5b1604286ba94e61194312ce573b2f97e7ec8e869839bece474f34f158336df468f557cd7b6826f9cc1b05425228a8ca35b7c2075a463 ef3fde8f1b210a0068a23de1531043ee3ad3916dcc2809ed2c2792bf7b7b28a9a9eb4373f313239573ebb81bcf59ce04525a437f04bacb25d11b10da0d8b2792 3caffa9f1ed84c3747cf515a8dcd1389a2b01675fe31e21ec54cb395a29b532ca8c51d8002ed87d8b3386de94c7006b6eab7d7093106047ec358e45914918e53 7786252cd87ce758393ab6101b6da3baaad98db8ea61db22c6d0083646bc00e55b481f91391ef371d6f56fee94350a9d77f45ca5c3315120ceb0873529e463fe c9236c31fe3fb5866b79d4cd79a52eb6fa9a52cd609e5ca13b1486fd0f05c34cc7cbd139653324ab3eb05081e5abb5b3e1813374a97e8f0a73c0168a2635d5e5 14de857d3bb39fb208389cffd99ceb7318fd110e543fb58595825c87f0234d97b649f568cdfd32cce2e8f3c6436edd8366193c0a6046b5b19ea6e703fc681fe0 c1a1edc98389f8f56bf31a0a70149bc5c0618576798edea239fd9baeacb4973a0edfa947ed3934876fd8663deb6164a180b0a19ad1bc268f0084648c4ca2a1e9 848cb645ab16be2cacc42ae81b22aade1267f4b46a5fef5839a4419457256730d8ab39acc12540d748a49a823731632d452b8ffc10e7c0ce9ca6687cdb5d399d 60fa214693f775f82c7901172520e8bce058193b4e60ac7d656cd7a46973732f329bd6bc2ab5e84a57957eb1aa661c4cafc8566b84b20b988999f664b4a27327 80f33e0d7c4d418ebe9c9cf09e8c6bf517cbb6bf0b2f70f7efbb81108e59fd17aa1d0428c65988928c03c1ecfb42fb3d02b450651bdc0711e530ee2db6557918 07fbbd7229ec3b54a0f994f88a410e0fc15544832e7b2324e89e7583069d405eac6dde1898789fd56871bdb8ef6af1103c94a6f9dad0274486a0b4fef6544a9c 8a5a5a8efcdb26569518af945c2819559ae3a1d3e9f0a551e8ea33f3596ebcc11841a811e89034d7ce5621b360f37144e8324d195f3d831b143a28642485ca31 50e75a876356fec8fb67759efae1bc320162ef7c0431a331a2604a841539010380f7d1a0119a5ac540bbbe04191e7d2097120e124f92916a90d097e325760bc1 bbdd3978d40787dea9fb014ac2f38a4f85ceff87ff1742908f68633b66b8238bc957c9260d60d8797ba59e4ceaa35417d0cae12261929adcf93cdccbee80f3d7 b41e2dd5cae13a7a23dcf7e078d19d201f935c64f4309a6d93780da46677fc138a5c1d0ec924cc7cca1efe8c0febbaea1dcd75881f5ad600bc8e3bbcf8362596 97bad5ae3b15df0ef9e526541f5cae399f26fcc51898fe034a23cb377e7182ed68780450ca3dd264b308e8414be3c306ad83370182e900d46f9acf5ff8339c43 37d49d9249ccefeafe185fcfeabfbe6bc37bfd717fd5c9cec5d27852a45ce7835ca0691887935114be9cbfa2bfe4058cb06c0bf01810c1fae466284233438a2e 85ef0b276e04bb2c014c51b7e41e07490cf1bde5aade06c2ec1724db884b4a1bcc16b9356872c11fd1d68d0ce070a44ac4769afb6addfb03c2fb1bdbffa86e14 7f66f7303715b68460bc6f16346543a64fd502ba34eb6849e32bd4466a3e72792d6b7fdffd08ebc11c291286196e49112c05904894aabf9f4e65241605d96d68 36f3f88cea29b18c07dfe391a17c7d9846eb3d56bb79d08788f4ba52f110058ae2e8ca05a36a5fbdebc60f8372dec37f4fa69ebea445db249511e890b924189d 64f63e0a4ef68acab678ac1dd02499458a63ac9cd933301ac4021cbbfb561da87239312a0f0e54581d952f5e13d2ddb1b5129198eb0e5b180ac5ec495e4dd937 299002257bb65fc6beac7c58cda87d285e1ad077d2f4ac5de141448d876a97e745fb30fb30a1739e447640962d7586e5fca87e326758fc08cca0e33fe35fc28f 4b1fc6743df8410c4f56d5a621678f5d1aaea549142c900a5bc16000b9409a3100b88a6a2dda20de4d3748433a0bedebff9a457811fe10b47aa459e165c94dfd 9aef1a03128fe57c534119a318251bf8dbdfe096129a81a817f2da16be22fd08e20deae0ca528ce847a0654a40d662572f75650c441527ec864e74e386cef6a4 572e4678e7a27fc6012d7998d242242e9c5025c5ccd236f5ee9c26682dd476b3f4cdd67e1029f66f100a9c453cee95882a787000ad50313cbeffb728821a8803 77c5ef67bbd05cf84b5d0a174c321fe523f2838959f21b9b887eaed8194a13df6ed58925d3644787355009950b3cc923c4005588eb72b1948c95634dae8cada2 a1546a85e4f9ba9e23a85d3448ca1d44f4a960ba33e70c7e5ff991118af2ab4867e86ccbc2c1d377cdc447e4eba65c7e3b353b0f1976a1f45dbe366d9db79c0d 3c77d2f9dad803d120cadd32a5693bee656f5103df4a1b7d9acf67a025603211238d594f5002a1c3f77b12a23dc88d9e6188e2b080d9be48c59eb2d84ed45c51 cdb0e7041e0221625332d32004df7218d16b1ac59ce8a3d67a6142be7a4d6ac36354b83327b2d0b13c692fda4a440e6d25d78a7787336f64a69b697a4ff4eb56 d117a877ca60403b49141fd8804e71a8cc050e111ebb03adac4a9232f61ce5e8b6c3ef6acdbb4b85a2023b914c6cd9874531c0633b7fce488a2c54dff63e32b5 00fa11accac7ef454f4c37b802f315f356fef1f9e81236b70a838e3f737e98c9105ece262566ff77ba49d385d7502c493c0df5af28590fc31f89e4b13456187d 6c1b13bdad9808ca54425b3ca7b909dcfd2efd8f85eae95da7aafb51b2c9a7873665ff14a3c435e1a0d5760b4572ec7a4b7fb1d657cfeb0206e2d9dd84e0a918 9f40b8510afe50e376b6e19f9ab26e8cc3d078e448ed2d9b7577d9385012a623c687c2d3fd4ccb61ccccda1bd706b7d1ab69790ee7c62010633890ddb8c51ce5 9997acf6c27052fe3ff554293279290194ae4dec105ed66f0cc8a28409b6f031579ee147574967e7839bbec5a1d5cecdb7152d672a85c85923042d4e6453b0b0 2b528e31a7820996715aada0af88a73382525d11e3bbcd30a90bb91de040042f694b83ec58b625ede1d1cd7d5d3f34ab287155cc9ed25fbe4597ebb3fba7e1c6 311d4a51603880fb0700f7f7d7af34776d11b0509fb392d47062b97a20f4a2d0a7882783eb1b1b474f0b5b5c38bbe0ab2a6273326c5b7a434042a2e9cf757067 ae4a7ab78d9452f8d1695c2beaad2ede70eb76deefb0b4e06dda99d787dc62fb6f6b4e216d5594a8886cdf010b6b9ef4399ddab645a423ce8522ca392983dbcd e9cf950838daa0fc96301eb7fd82f000c614ab8d977b5569582f4a07432ff9ed0afe2d02b1d4aa400dfa20f552e3f2e56e4ebb4762841a8d5fa13b5218e4b702 6b07df026de2bf55a00052445468924dd022f9154820a9b8f025f3b7447f6705ccf4b8f70e6a35209bf7d3bb325409154508ae26a51b460ce53fa16b7e0a3a7d 818f8aa445abf2f117cfc0c77c12aafdcd7f3bd30342fea51d4708c0dfec89af089ca8ee924b4669c870562e76c61ccc75de41038bfb27fcde0d1f2d5fc3e0a7 5516941e7dfd5c48b4fde5b9fe1306714a78a42efde303ed37f55e60a8f40eb43a85655c8da893d267d4808ed8b68c615b3399fcd41e20aaf2eabdec02f400ed a615940ebf0a01c196b06ed1afb8f18b016362cf4ceeac6a4aaa69824a93577a73c51cdcc74593aaeab758efaedd7d1b68fe185c2ab45fdedf2e1bd7d6335a18 ff074a447ea06d098c17fd14e03f9cc2d2303c3d57c389880529b0d0177de9871ef27564d1dea98b2369f827f1e810677303c5a7d88a73edcf5ab4834f18d23e b55e8dd5d6899e7309cb8c425caee5843894f691a80cfb0f2ffa3675f17fcb3dbdde0c44c5a15282a5069471f9658c816258dfcd5a77fc68170d51bdf2bc2225 f3e012d1a5a70b3d3bc79998656a81a262809bafc4037a3d07a78773d8b0f01266d8438ba0325ccdd02ba692282ec66a4ce4f4773abb43b00566351cd50623d5 76876a3978017d40e5e5ef536974d6c8dbd7cf9e9d7e00bc8b89179d0cd9948f8b02c9e4eab5d8be491ebb66dce1b8a9fb4fba6a11c1c0dd211428d7db28239a eb31796198e525ae3bb1cbe28d0d3ee9680610c0e97569207ae5d03042494a83cd4fe924dad70b3e85eb24f02ff529968f7735fef9a9f8c2ae3e3bcdcbf14fa9 de29d6807d6f5937534c93744863e38b59e4f122abe50700148187b8211576097195d82bedddfa5bc61bc9bcca3fa498fe8a9f6966ce63c044f5c9e2c1ff4fd9 5ad124ef9fbd324ec5f11eb1f3c882c25487a95f8e84d9b8fc579837136f7ea5400d9c900f77bdffe4ab148d20a8ae6d6668c9021495a800c4e53ecbf8e3fc5b 7f2f57daec9304fb648ab8e05ba9e6566f9dcf552092a73e06d644ac32a445a46ad67d250a2b05e28c6d9395701b563edf11d205c62bdda805e8b7521ff39f7f 515235c13f28f92df2cc2715bfbc3e749baa6bebe253a6d591fcfa35a81ef542b8a662a3130611f331826b1960c1376f716ac214dc9d093399189f8801b4e3d8 a54c4b38b96a6b681316709ecb90c2187b021323978d1fe6e2cdd99d0cbc2709ea767d26bdb7ede04add2b158fc881ee2900575cf2e1c1519c67fd3174c01474 977f55e41272a1fa952f96bae267d1fffeecd3083027f6c9df0fdcbaed5b58a2f33f9de42d995b54429e396cdb5950fafb3ff988526ae6dba5985085e868302c eb553c63daeeef9a08d58f724f51fbad4b1bf53c6b17d59afb92a869b705538590f4b9ca0c1392146122a7c53f76f06d8a7c4b6d55761ee0de89afa6848da5a0 600a083b2155ff6e2f340dee71e3e9e996db0805075a311d0a7f19c8c7dc24245ad9561c6329aa6315ef611f78c7958d18775e110bf8fd0710a935 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource 610 998 1870 (\(Big Brother finally hits Linux\)) 1870 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d07d46fc97f64034f7316f286161df977422c4d4c0134696d3bc14d42a5196465b793903cbaef39f544b1ad2677617c3d7e7c7411 44760ec4c558100f8d5150125bff221a8d8da1c78d036ae5d0ae1e5b46f2648b1738778da432f2e0a79098c0ab9bc73558835ae1fef4f1844107ef1919c93b0c b64aae6608a9fc951cd895a6b3f3e90b8e89304f12a55c7de79fe0bc6eceb3abda8db51431b753678b3817f478d9f366b7750a607d8c079f73d8c5e56e068fba 5c63518263c5958057e03a4ba68be49c1abbbc6adc111544551d33c27152a5671bd06bd87987c94f41546459ad4f67e540d8cec6c2662fa09a888fcadff5763a ddc06e460f56a44cf58f036f265c29ff21007faeb386dc99302fb0c75ec3af2d623b6a9ee8fdc0930d2900a8a0b9485c95943acc8b7144032f285865e89eaf54 f9489a0aec81c7baff9c82a84b4d36f53c63e16a1b0ba314c92122139d3f1a30663a99febda776f3a5b09f58f3d737c4f97231796513983e74b04468f5e52254 f96a494e30e009344faadbf40da0a3df5894c843e2c62eb2ed15ba09c643f590ea45c08441ad235a12bc9c8396b5c431b942a496a1135d09cd0f97df836419fd 3262b756126f193819ea64caf51a91c848562fde8e35f695218a75506a7bad9918eec09b13c0b5b50403eec5da0b3e58feed5202207d7224d199f5e6a4ed96b5 e7f1b4fd4e7346d8d51d4ad11f6001b58242aed085deca4241fad480c8575b56fdef53291f0d4452328374c7a58e5b6caafbc80ec9623be7c85438cea66dda08 fd1aa589af6b29384796377df9a3bbfbe204f740c572bb1074305a774dd30656a2aa2e1d9b1c0ba7454e81fc0d8a76f20dcfd29525365d5ce4165a7738a4cd6c 0075f2074f3d69ffa948d84e7707e13055c4b9a98a131e7fc595008a6d27350694b44ff7638da1adf4af8a800034b6a67227eba2bfd5365057eb8bba15dc362a 38b23966b57fd5a0d9b85b17910d13f78b357b14380ab23f50e621689bd4fa7c22956258469740feb8b58ffefebc8ace84fd883c822292033f12a2d16aabb3ae f236023254fefdf6cdf01fcbc61dafd6a55ae23ca0b4ff4cce608f3081b122c411afa788634f11968afaaa7a773d7175da7907d308714ce8e3c39a17920b52e1 e27fcbba78e824072b162bd0ab6d0826cb0e5d51f2d7437535726aa2b48c6658b4ae98d35e45c285f60cfe4885e5f54b36b4a9f9a740d2203b44cfabebfdbd24 76fe5d6ed793306e4a9afbda3812514148b680a5c8b96a0499082f5edb83c3a44be7a8c2343f9abeab596d6d07fb252a9d5c1fbce4a9b9404e64ebeb153f89b7 cdbded7e60aaf93a93bdb0fd19b7f97a4bcf8fdc10be826f733efd9b54af79ed02588e5922c92b79db886d5f68ebaf69e3ec25a0ee3e463ad2d68d3906831ccd fea8ccc36fdd81934ff30689dc4dc2ceba3566a902aa9b6b2c841ee21c4026fb6cb91abe9d7c17c004ab60eedf8ceba17fb1e7b6df34261f180c1b7be2e6615f 91eb33d8516566c788082983b544b47f94395145b17fc7ce6027029e9111c577c52be631dcef1f6539d76acb3887c258eb017070133424e2ff9433d1738b2d0e 5a98d4eaa9d2f59f5bff8dc52be413ee31f2d9d5f2b8dbcb948b8483eb5b2310b4ddb742920d7466a6c76ad24ffea84db6a7c23de1f5db442e64f715de5d0f34 2215a008e93426cf76a68e891a542178a9ae7a56bd5e268306a3f96fb2b2a4998c69edb1636255affffe4c65e47626a004a355ad5c1e42cc0dbdac265b27922c 492efb97a21591b0ed96c00148b52390da02edbfe77d173aa2499b4b2a58c7898aaf75ed363330456ae71fe8204c445bd0d12406410ef1c9a935dfbb68 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -1 1 SJ 1351 1340 535 (R\351my Card) 535 SB %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d0448bcdaf2881ea6472bde411d75ff8378c7389b65a1c39cec9312676c8e2b3872d24b1120f81ccbcfaa1a021ebd657347ad9b3a 25a5feba0fed91bf6050489e080e699eac3ff41fd0001afe42e9ff70df6702e91b80c1177cd67f0a885c54b0c6b4eb135acfcd7d8692bafe81b24b78debbb0ce f5abdb21d9f47ba04d95f4fc9d6d2b0954c04a3fefb6c62aa930b483a5c25c7f0dd61a16733c26008660fec0e413fd51a21264ffd0d6937b113fd314ee1017fc 5dbb10aa8ae6c448992468de3166ddf2ddebe662beed4ccf3c4b905db473fae6e98e56570a34e453ae7e96551b5ce6fecc9892c8f6ab0f30ac94b3f9ac13572e 643c39532c61e72c55fc424a0eaefbcc008eacb07e46f31eada1364a19b316a613c3b59e43c75416d474a8fe4a2355e91a3c9d138c49b3c648aa29d1de834b36 05f9b104ee2d15a150bed4e0692b562bf866d4a92f3e29ee75608fa3708c799d664220409ee157de6f9830cedaa4ff9a53a0681e55a1b5243b14362ba104143c d8013ca0ccbb8dc6b3eeecf6bd5d46c3b570ad8fa27a5d0955419b7712941e8677e54fec3580e56d24501b7994395fe19d09230d576918b3ba1763710d0b5e79 a22a5e73385df5d0a49bdd5537c66520da770173078f784181e3d5d78d5a96f3669cebe588fd60d47bbbf49b30883362e10c4cfd18f30c1283741776f510a394 89db102e681f8922908cce16341b00c6f7ff3cc48b721f329c2fc45485b235c3c3f97ab6521682eaff9d41fb397c028408615a36ad0f4ea2a638b75a7aacdb5f 7e4fab5e62934289a76dcd109b2bc76fa249996d8cd664e1ece142e04a4b30799e6eb469328dfff6f2e5d73f24e3f8748b3b5370e060bb45ab41c0ae1058c4aa 2cc86efc1bc74d8bdad4e963814ee168ac31af24d74fbb319ad078e08c1cb6b8b4a20c34b3db418f4854bd8a9975dc252a718890ecd206b81c11068887994f8c fcc12cab7d1d6e7f2ac0b5eb22d5bf57dc4a95877baa293f59815372747501b696f789c1b9a73b30a0a6c0a9406587d35ff5ba009e88a6474acbe8f8fae479fa 9818551348de2f0ac7fe08adbdb5b7fb93e1e101f0ce440b93c035287ff328580520407d2d69a613fc29386a5a3acf42d0ce61315b7caacbce1502158c738641 a99cf38a32ec1b7daeb408044b3f96c4c9819bc2ea25885b6384bf3420c93d26b31a713a7aa5e5ae66651e96675818982849892b4b2e36b3225e95832285e45e 64474235c0f8f22952804c33581f456c8c75c6f4b3cde3bc7124fbd6f8e0d5afd0afdf95c7a30acdc3f418d9b8ee456ecdcf732fd17c4e7b51720342ac6115d2 7ec7ef7a1b289f7455d28c1b67ffb8c4e0098ba829bc9b98f6fa4d4f4e1f422d2c2695b2a0583a4d73cd7b9195d284336e275aeecfd0b946f12832341c270ebc 82dcf74e3bb39f384db6563524a0673dd89bd980087543228309d43570e573ef4517496a8f55a1551df3c274fb8ed76e4d7f7e60ab84a7be265f1a72ea11adb3 183c94f15c27da85467ab0a82e6853116cfb513cef1d4ff13c69b2bca8c14dacd849457d5c477599e297aa882141aa5810366aaf21df11a2da129bfc9012b86b b04970b544660af9f14d58469aaa4e9dafd128903407546d326095dffaf59898f42c6149ff89f3ba7f51b0783324efef4cee3bfadc43261b7ebac69841c203b5 98ca01488501df66639fad874d4a65497f77855f36d801e6a04eebd15da373bb79d1c3f94e9b5ea0436db50dd9f7d2c0ccba41aa97ef92c1ec3d4ddc67569197 050e70236832839b79eab2e9dbfa1e14f46d86d88cccc549070b6a49e429837bb9716f91b09149b52132752507e4f3730c42faa725574b54b0322252729280f7 76eb7cc1338d6b783249b2b0fc16aff94c6ee02835ad14897576c4d550e5cd871d805d9a86451270ce1cd07b86e5c49f9857af5623260d99860130762948e357 d8c12871c526705394732e0f497a01c2bb8d12e10620741653a5a3a2c45c847ec86befc0c20ec653fb0b052e85a7c119a8fdc64b21070738c445b4934ef838af b3fb7e772fb842ef97f1f58d21c226cd31bfe040f39053f1883f9918242e4ea610349ccbd940ab10c957c56ea5b139e22c69864e7cd0e58c6f48d9c6ce56ed52 519f32cde31069201b2aaf86a7b1e2dd9b7f1484e18989cdaf60b39df3d56058218177229d749332108017ed803b0e0ea1a442f8f858a8c4fad02e8d9f2f0aad d881e0fde6b0667c277b6d08fd2e9f19decd3359956d5a2177b3d1b49eb5a89a0cecc34bb3d927e988b4f851f92135ccbbaf1c1cef76799e051d745eee9ae5d0 10599510376287bcbb255661713ed444199b5551b95596c307b8da70cc304fec8f6668e3c8ddf212ecfe12d0e0f6a625ec3301a90c78992cca3937538327d7e5 6427bbe4704706763c563ba520a468bf6b18533f68ee5593f52d602e216412cab9b3e91a1d6bf2b4d6a39fe07d7df3b75d1cd58ec23d90e88b36539cd199116a adb476387999b1014549b62fe175a349dcef6a6f105f7fd8fb70923f2d77de2427f3eb4db383f35bc8aec742fb5732e7879dc7ae90e53c0d21b1ba7fd0d04a72 05e8834226d06a386bbddc257a6f576b94ac7fba2eb353d71041944503aebed5b43c1d1bd1d481009bbb903bf114a6e93ee6d65f974d2146ce3d305d2043aea4 42b6dbdf556a5c62c6e2912969dd46efd9db94acd1b39d0d000db989d4d4ace46072b658c1a1c1eb0a0c14693616f3d0560c8dfe861da170d4c935b182b47d37 7f8e693e87ab147a1ee48edbe91c7917d84aa2fecd97ed787174286d9647d8624955683f1d2f9fda1e92c2ff0996ea4cf3d16b 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource 1104 1509 143 (car) 142 SB 1246 1509 167 (d@) 166 SB 1412 1509 111 (ex) 110 SB 1522 1509 137 (cal) 136 SB 1658 1509 33 (i) 32 SB 1690 1509 118 (bu) 117 SB 1807 1509 160 (r.ib) 159 SB 1966 1509 59 (p) 58 SB 2024 1509 68 (.f) 69 SB 2093 1509 39 (r) 38 SB %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d062efa8542d7e1727190148f267200f4b0f0b312c62fcf16c9bb3a1ed1ca5003235e108bace76f8cd465fb73141b6671457bfe24 d3087a80e96a143127f065efd5a70426d02c648a5b6713f0ef8b187b09d22d417b6ec735e018df5521efb68bb7945d3b436b5504e18950cdc524c91cdfbaa538 ff53cd9c5b23847e32038edcbbcfe0020d30c34229eacea8dceedcdb57e1bd2059b524307421fd01f6e08138e547f0f548bb5753c08a4ce11186ab148affe57d f211a4012da0db12a069f6d3965954caace909c813406571df2dbee0d1a866fb218c8f0ad696e67512cf4ac2fa5bd89767b80b9c03b44be00729814896ee417a 79b0fd3cdb52a01cde8f32c4270ccb5fd17d506867be5d8851fd986beea38a00770f89ae5f25f4e05a074afc5861e07d3e15c7d8aea289157f8052a04aa74ee8 3db9f8fa655ca2485e12dc74b08c4b67b131babf237a5b7606839c2dc79b5e57f5bc0fa459a94fca2bb520c6e0906f98f047d163787827c957ad081d640f998e 6ee4374d20b63638a61791971bc7678c8aaeb7fcfdf3b39743047a113562ec98cc58bfd3438b8ab84bdb5d15bd0752135bae7d3baf2837b986bb0d86357e262b 1fb3ccebf477f1b9c92b09a4aa8da142c4cb98800ba8fb79bd201fd60e169056c5e4970ef0d0de7e89456ff11ce40bd20e7075a6786465e0d11327d736480c67 128c4b87c9fa3fd047d7a4941889822bf4400fe4f65f8ccdc71bff70e6b882ddcbc34c36c06340f9ed5f977141ba4471747fac0d0ab4ea50def3e9561d933230 36dc2ca89bdbe6cd831bcf9f9376f10210d80be8d0728ab562fb79f92d20774cfc020a8b1c58b8aefbebae453224ce042076267c159a0321913c7432001ae486 895a6127b493200e04ede57a8d700f22567eac 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -8 2 SJ 1128 1677 987 (Institut Blaise Pascal) 987 SB %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d07d3a1806c63b82e1b0b6863860613ea7c0c2019c973386b8303b2b57a3f751027c7e560901b4a11ecebb6fe5e635fc9cd65b36a 4824b23b464204a5a4e29f389c8782be9a0cc48546e8ff276eb1572e8040eebc12bec610990c830312fc89edd1773d6d686d3f1bc4d6425e4aae6a205c14e756 ea8ed91a68fafeaa1789dfd79db78443d34fe0725a574387554d4b289736e90d30096822f8efb359ea3b7fed82e0f52581b661100703d0df3898fdf4a901c1c1 c4607acf54796e8c1e1ef17999d7e6711cac0e56f68eb1d7440d4dea08a4890db7bc1a2becd33a6a398c390129a6a7c36a1e80f10929a8348d9c8c1c88ec2711 8582773e34254a453ba45989289e36f29d62a9c6dff3b47589a15f9f0d2a761b214e710ca70c124c45b1b84d3c14bec2d979a7ff3fda0dac0cad0de30ed6d15b 0e6f30ed55c4bd7dd45ba7eb7cc447d23c380473efaf740f3290e20609e88fb8f7d237e49ac14a03c9c459683c8acf3bbde20bdd1982eada1b226115528b995b f886f2f612fa9e7f97a06ae9dbc6beb350f8801f33bba0024c4bf80b11d8fd3e1433157c962b85cab7bd26d3d16c88076246a5e4bc8dbc147282c9a57bc60c1a 9ffe52d1ce9ecde0d29bc4e87aceeb157e452421c33e35fd06e5d752fbb1be789515c546f58f949b9df8b5e49e2dab0710c06a5278e9f5f9b08c19d934c0f50b a36cda7d90da9c09c983bf49906c97f0cb5c7c499393ba1b0e582fee7093bee4e5013dc3ab78554c1a4af4a0b80237ae22117f28cc652d21191681db064d2c40 5cc5fed5a1e6fe7bd2cd3abd612c08501d4528cd59769cebb478fc107360517360e288958c74da5cb92a0d922f2e3b70f6bbbf4817c0390b7dcd4f22aebe8259 8a9d20aaf21d0027b6549d854a4464d4839b0103cc49294e1bd647c7176ee6236908a4011c12dfc3a76121bf1f35e4a3bbebf94fb8be94d8b2c82fcea2dee861 d01ffe47264ba069a35f17a67ad5aaf697f1962189f8f3522c22918259e3b179e20f6546b183611bae6a3a74cdc9ff0b104275dc74950d6450bcc94e968bf7b8 cdf0614ed7dc490a1d6c79e9e55adbf20e55ddc515f9af27e448a89577081e7f73fc88316a8dc7bdc93482da7e0c0035d4312467579bc3f4e833b1d39fcfb422 73df4a6aafafc00f19352cf0ff6cfa34addfbac1d9ceaf9942 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -6 6 SJ 620 1845 2006 (Universit\351 Pierre et Marie Curie \(Paris VI\)) 2006 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB %%BeginResource: font MSTT31c1bc /G32 [29.0 0.0 1.0 0.0 26.0 40.0] /G32 { 25 40 true [1 0 0 -1 -1.0 40.0] {<007e000003ffc00007ffe0000ffff0001e07f8003801fc003000fc002000fc0060007e0040007e00 00003e0000003e0000003e0000003e0000003c0000003c0000003c00000078000000780000007000 0000e0000000e0000001c000000380000003800000070000000e0000001c00000038000000300000 0060000000c000000180000003000080060001000c0007001fffff003ffffe007ffffe00fffffe00 >} imagemask } 50 /G32 MSTT31c1bc AddChar %%EndResource 2919 2191 29 (2) 29 SB 32 0 0 167 167 0 0 0 150 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d065133686e273aea657ad4eeb667942355bbf44e5b3127dd61797055dbc6ed38d13c364ca31df6a437b2bf27d1c5ce57b92472fd 0567e62f9d7879b144ad348a752c6f7184215c65c061058bd12a587f902784eb4707535b56e1e47bd57dca41ec9fc95977b30f7236b89bcec1494ae659e38595 c723fd50fafd771309d4a66d686ddb4ff76f707d181c2ac6702ce5f87481cf81d8bc400f3ab2da3db762d0e5be70030f6d87b568891a899af8427f17634ed0d3 98a8df688b1d9b939e9e2e34819b1802edc1c2a594a13ab439c605efe344e7186cff66259b040b6e47bb55554272bc496f41bde84e 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource 256 284 121 (O) 120 SB 376 284 222 (utli) 223 SB 599 284 84 (n) 83 SB 682 284 74 (e) 74 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 648 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d0578cb0186d4620ef95432fd6faeca0fca7737f96247536631e5e6575a357bcc6c8b4d0c3576fcdf4cf885af2848d87a8abae2eb 7f3f61e803ddbf80caa5712c69691e95d423c96c736ba2cf6a4c589d8afbc9b67365a82aa1e7bd7932238a52abd053e77ca9f2bb3e3af59955ec981c48f64f6b ef6b6bad5cb0045916060c29795a6a926a9c36958eed0f5e8447dad65a8b2ccbc3a3331eb99c2b4583fbbca75e26226faec4986c28b27517922f6938c3213d95 4aba452879ee9dafb095476c97deeecfa06d2267046077586fdbcdeabf034fab3472ab8e3d18461c4dffafb40e1f7cfb2334599ec32505654c69dc5d25a82323 eb5cef1487d3946135a2ac75c70f4c758679017c8a8ec2 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -8 2 SJ 586 615 935 (Principles of quotas) 935 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 817 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d0443b441567658a6856e7adbc62baedf12261c9875c4762d5f6b143a52c4aa4ce21dbb4ff936839757b4a3c065a07fe502a0354a 8ce25f6c10920e15983484eb48cfc7a939fda22bc4a6ec91fbb4b0916edba2f6a514b086eb443fb3eb38b361d95d5feaa9e01aaa83e5d9b36d92e37e0aa4672a 89deaae53dcf2e752fa2ebdbc2e862110838defe717b3c44128d33f2928ece139ecc87804fb5ff9fe84675bea7d752a54cfa1400fd4977c2964b88944a337035 5e729793e549c5d06a7bfc35000ef31d552db250a6ebc2350ea3429c390fa173091de36f683677c2966043917abad1efb0d0647a850d23f51849151115030860 e072a1c992b8665630f1bc48dd3f1d2c61d3586e21db6c44ad5816dc55ba1e1b11a17ab27cc66220f2899c6c4a7df9656ec21641de780ffdd7137b6db97e666e 25cd3864ff63039b0f60df920af85299b29c 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -15 3 SJ 586 784 1645 (Configuration of the quota-support) 1645 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 985 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d062647bb1263d8c25299774bfe585fa96223d906032043f9df53b5ea93f1d9c8fe6050ea78c741e63c84b69a755949e25da8285d 1dbcc8d56b993b784ee792db023d6f938f8c3704820cc30539a588b5c33a9da56c2ee373f843867ab024e73d847b9cfe7c27c0baed1952d3f0c7bccca7c01bab 3fbbf1afe64aaaf40492500433a866ee9c4c101976c667778e555af1ace42c5bcf80221cc89566b89aae50c40422326c935dd6998f7048f941418f6c2a7fd903 284d3b582fe90315 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -12 4 SJ 586 952 1821 (Administration of the quota subsystem) 1821 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 1153 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font -2 1 SJ 586 1120 504 (Quota API) 504 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 1321 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font -12 4 SJ 586 1288 1717 (Implementation of the quota support) 1717 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 1489 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font 586 1456 137 (Co) 136 SB 722 1456 59 (n) 58 SB 780 1456 144 (clu) 143 SB 923 1456 46 (s) 45 SB 968 1456 92 (io) 91 SB 1059 1456 59 (n) 58 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB %%BeginResource: font MSTT31c1bc /G33 [29.0 0.0 2.0 0.0 24.0 40.0] /G33 { 22 40 true [1 0 0 -1 -2.0 40.0] {<00fe0003ff8007ffc00fffe01e0fe03803f03001f06001f00000f00000f00000e00000e00000c000 01c0000180000300000600001f80007fc003ffe0003ff00007f80001f80000fc0000fc00007c0000 7c00003c00003c00003c0000380000380000380000700000607000e0fc01c0ff07007ffc003fe000 >} imagemask } 51 /G33 MSTT31c1bc AddChar %%EndResource 2919 2191 29 (3) 29 SB 32 0 0 167 167 0 0 0 150 /MSTT31c1c9 font 256 284 140 (In) 139 SB 395 284 186 (tro) 185 SB 580 284 84 (d) 83 SB 663 284 418 (uction) 417 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB %%BeginResource: font MSTT31c1f0 /MSTT31c1f0 [100.0 0 0 0 0 0] 50 -110 [-100.0 -100.0 100.0 100.0] [1 100 div 0 0 1 100 div 0 0] /MSTT31c1f0 GreNewFont %%EndResource 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G44 [72.0 0.0 2.0 0.0 68.0 67.0] /G44 { 66 67 true [1 0 0 -1 -2.0 67.0] {} imagemask } 68 /G44 MSTT31c1f0 AddChar /G69 [28.0 0.0 3.0 0.0 25.0 70.0] /G69 { 22 70 true [1 0 0 -1 -3.0 70.0] {<00f80001fc0003fe0007ff0007ff0007ff0007ff0007ff0003fe0001fc0000f80000000000000000 0000000000000000000000000000000000000000000000000000000000000000000e00007e0003fe 000ffe007ffe00fffe00c7fe0003fe0003fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe00 01fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001 fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0003ff0003ff 000fffc0fffffcfffffc>} imagemask } 105 /G69 MSTT31c1f0 AddChar /G73 [39.0 0.0 5.0 -1.0 36.0 46.0] /G73 { 31 47 true [1 0 0 -1 -5.0 46.0] {<003fc03001fff87007fffff00fc07ff01f800ff03e0007f03e0003f07c0001f07c0001f0fc0000f0 fc0000f0fc000070fe000070ff000030ff800030ffc000007ff000007ffc00003fff00001fffc000 0ffff00007fffc0003ffff0000ffff80003fffe0000ffff00003fff80000fff800003ffc00001ffc 000007fe000003fec00001fec00001fee00000fee00000fef00000fef00000fcf80000fcfc0000fc fe0001f8ff0003f0ffc007e0fff81fc0ffffff80e3fffe00c01ff000>} imagemask } 115 /G73 MSTT31c1f0 AddChar /G6b [50.0 0.0 1.0 0.0 50.0 70.0] /G6b { 49 70 true [1 0 0 -1 -1.0 70.0] {<000e0000000000007e000000000003fe00000000000ffe00000000007ffe0000000000fffe000000 000047fe000000000003fe000000000001fe000000000001fe000000000001fe000000000001fe00 0000000001fe000000000001fe000000000001fe000000000001fe000000000001fe000000000001 fe000000000001fe000000000001fe000000000001fe000000000001fe000000000001fe00000000 0001fe000000000001fe000000000001fe000ffffe0001fe000fffe00001fe0003ff000001fe0001 fc000001fe0001f8000001fe0001e0000001fe0003c0000001fe000780000001fe000f00000001fe 001e00000001fe003c00000001fe00f800000001fe01e000000001fe03c000000001fe0780000000 01fe0f0000000001fe1e0000000001fe3e0000000001fe7f0000000001feff8000000001ffff8000 000001feffc000000001fe7fe000000001fe3ff000000001fe1ff800000001fe1ff800000001fe0f fc00000001fe07fe00000001fe03ff00000001fe01ff80000001fe01ff80000001fe00ffc0000001 fe007fe0000001fe003ff0000001fe001ff8000001fe001ff8000001fe000ffc000001fe0007fe00 0001fe0003ff000001fe0003ff800003ff0001ffc00003ff0001ffe0000fffc003fff800fffffc0f ffff80fffffc0fffff80>} imagemask } 107 /G6b MSTT31c1f0 AddChar /G20 [25.0 0.0 0.0 0.0 0.0 0.0] /G20 { } 32 /G20 MSTT31c1f0 AddChar /G70 [50.0 0.0 0.0 -21.0 47.0 46.0] /G70 { 47 67 true [1 0 0 -1 0.0 46.0] {<0007001fc000003f00fff80000ff01fffc0007ff07ffff003fff0fffff807fff0fffffc063ff1fff ffc001ff3f03ffe000ff7800fff000ff70007ff000ffe0003ff800ffc0001ff800ff80000ffc00ff 00000ffc00ff000007fc00ff000007fc00ff000003fe00ff000003fe00ff000003fe00ff000003fe 00ff000001fe00ff000001fe00ff000001fe00ff000001fe00ff000001fe00ff000001fe00ff0000 01fe00ff000001fe00ff000001fc00ff000001fc00ff000001fc00ff000001fc00ff000003f800ff 000003f800ff000003f000ff000003f000ff000007e000ff800007e000ff80000fc000ffc0001f80 00ffc0001f8000ffe0003f0000fff800fe0000ff7e03fc0000ff3ffff00000ff1fffc00000ff03fe 000000ff0000000000ff0000000000ff0000000000ff0000000000ff0000000000ff0000000000ff 0000000000ff0000000000ff0000000000ff0000000000ff0000000000ff0000000000ff00000000 00ff0000000000ff0000000001ff8000000001ff8000000007ffe0000000fffffe000000fffffe00 0000>} imagemask } 112 /G70 MSTT31c1f0 AddChar /G61 [44.0 0.0 3.0 -1.0 45.0 46.0] /G61 { 42 47 true [1 0 0 -1 -3.0 46.0] {<0007ff000000003ffff0000000fffffc000003fc07fe000007f001ff00000fe000ff00000fc0007f 80001fc0007f80001fc0007fc0003fc0003fc0003fc0003fc0003fc0003fc0003fc0003fc0003fc0 003fc0001f80003fc0000f00003fc0000000007fc000000003ffc00000001fffc00000007fbfc000 0003fc3fc000000fe03fc000003f803fc00000fe003fc00001f8003fc00007f0003fc0000fe0003f c0001fc0003fc0003f80003fc0003f80003fc0007f00003fc0007f00003fc000ff00003fc000ff00 003fc000ff00003fc000ff00003fc000ff80007fc000ff8000ffc000ffc003ffc0407fe007ffe0c0 7ff83f3fe3c07ffffe3fff803ffffc3fff001ffff01ffe000fffe01ffc0007ff800ff00000fe0007 c000>} imagemask } 97 /G61 MSTT31c1f0 AddChar /G63 [44.0 0.0 3.0 -1.0 41.0 46.0] /G63 { 38 47 true [1 0 0 -1 -3.0 46.0] {<00007fc0000007fff800001ffffc00003f01ff0000fc00ff8001f8007fc003f0003fe007e0003fe0 07e0003ff00fc0003ff01fc0003ff01f80001ff03f80001ff03f80000fe07f000007c07f00000000 7f000000007f00000000ff00000000ff00000000ff00000000ff00000000ff00000000ff00000000 ff80000000ff80000000ff80000000ff80000000ffc00000047fc000000c7fe000000c7fe0000018 7ff00000183ff00000383ff80000703ffc0000701ffe0001e01fff8003e00fffe01fc007ffffffc0 03ffffff8001ffffff0000fffffe00007ffffc00003ffff000000fffc0000001fe0000>} imagemask } 99 /G63 MSTT31c1f0 AddChar /G65 [44.0 0.0 3.0 -1.0 41.0 46.0] /G65 { 38 47 true [1 0 0 -1 -3.0 46.0] {<0000ff80000007fff000001ffffc00007e07ff0000f801ff8001f000ffc003e0007fe007c0003fe0 0f80001ff00f00001ff01f00001ff83f00000ff83e00000ff83e00000ffc7e00000ffc7ffffffffc 7ffffffffc7ffffffffcfe00000000fe00000000fe00000000fe00000000fe00000000fe00000000 ff00000000ff00000000ff00000000ff00000000ff80000000ff800000047fc000000c7fc000000c 7fe00000187ff00000183ff80000383ffc0000701ffe0000f01fff8003e00ffff00fe007ffffffc0 03ffffff8003ffffff0000fffffe00007ffffc00003ffff800000fffe0000001ff0000>} imagemask } 101 /G65 MSTT31c1f0 AddChar /G6e [50.0 0.0 1.0 0.0 50.0 46.0] /G6e { 49 46 true [1 0 0 -1 -1.0 46.0] {<000e001fc00000007e00fff0000003fe01fff800000ffe07fffc00007ffe0ffffe0000fffe1fffff 000047fe3f03ff000003fe7801ff800001fee000ff800001ffc0007f800001ff80007fc00001ff00 007fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001 fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc0 0001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe0000 3fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe 00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc000 01fe00003fc00003ff00007fe00003ff00007fe0000fffc001fff800fffffc1fffff80fffffc1fff ff80>} imagemask } 110 /G6e MSTT31c1f0 AddChar /G6f [50.0 0.0 3.0 -1.0 46.0 46.0] /G6f { 43 47 true [1 0 0 -1 -3.0 46.0] {<00007fc000000003fffc0000000fffff0000003f81ff8000007e003fe00000f8001ff00001f8000f f80003f00007fc0007e00007fc000fe00003fe000fc00001ff001fc00001ff001fc00000ff803f80 0000ff803f800000ffc07f8000007fc07f8000007fc07f8000007fc07f8000007fe0ff8000003fe0 ff8000003fe0ff8000003fe0ff8000003fe0ff8000003fe0ff8000003fe0ff8000003fe0ff800000 3fe0ffc000003fc0ffc000003fc07fc000003fc07fc000003fc07fe000003f807fe000003f803fe0 00003f803ff000007f001ff000007f001ff800007e000ff80000fe0007fc0000fc0007fe0001f800 03fe0001f00001ff0003e00000ffc00fc000003ff03f8000001ffffe00000007fff800000000ffc0 0000>} imagemask } 111 /G6f MSTT31c1f0 AddChar /G74 [28.0 0.0 0.0 -1.0 28.0 60.0] /G74 { 28 61 true [1 0 0 -1 0.0 60.0] {<0001000000030000000300000007000000070000000f0000000f0000001f0000001f0000003f0000 007f000000ff000001ff000003ff00000fff00003fffffc0ffffffc0ffffffc000ff000000ff0000 00ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000 00ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000 00ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000 00ff000000ff000000ff803000ff8060007fe1e0007fffc0007fff80003fff80001ffe00000ffc00 0003f000>} imagemask } 116 /G74 MSTT31c1f0 AddChar /G66 [33.0 0.0 3.0 0.0 43.0 70.0] /G66 { 40 70 true [1 0 0 -1 -3.0 70.0] {<000000fe0000000fffc000003ffff00000783ff80000f00ffe0001e007fe0003c003ff0007c003ff 000fc001ff000f8000ff001f80007e001f80003c003f800000003f800000003f800000003f800000 007f800000007f800000007f800000007f800000007f800000007f800000007f800000007f800000 007f800000fffffff800fffffff800fffffff800007f800000007f800000007f800000007f800000 007f800000007f800000007f800000007f800000007f800000007f800000007f800000007f800000 007f800000007f800000007f800000007f800000007f800000007f800000007f800000007f800000 007f800000007f800000007f800000007f800000007f800000007f800000007f800000007f800000 007f800000007f800000007f800000007f800000007f800000007f800000007f800000007f800000 00ffc0000000ffc0000001ffe0000007fff00000ffffffe000ffffffe000>} imagemask } 102 /G66 MSTT31c1f0 AddChar %%EndResource 586 614 994 (Disk space is not infinite) 994 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 788 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G53 [56.0 0.0 6.0 -1.0 50.0 68.0] /G53 { 44 69 true [1 0 0 -1 -6.0 68.0] {<0001ff000300001ffff00300007ffffc070000ff00ff8f0003fc001fff0007f00007ff000fe00003 ff001fc00001ff001f800000ff003f8000007f003f8000003f007f0000001f007f0000001f00ff00 00000f00ff0000000f00ff0000000f00ff8000000700ff8000000700ffc000000700ffe000000700 fff0000003007ff8000003007ffc000003007ffe000000003fff800000003fffe00000001ffff000 00000ffffc00000007ffff00000007ffffc0000001ffffe0000000fffff80000007ffffe0000001f ffff8000000fffffc0000003fffff0000000fffff80000003ffffc0000001ffffe00000007ffff00 000001ffff800000007fff800000001fffc00000000fffc000000003ffe000000001ffe060000000 fff0600000007ff0600000003ff0700000001ff0700000001ff0700000001ff0700000000ff07800 00000ff0780000000ff07c0000000fe07c0000000fe07e0000000fe07e0000001fc07f0000001fc0 7f8000003f807fc000003f007fe000007e007ff80001fc007ffe0003f80070ffc01ff000700fffff c0006003ffff000060003ff00000>} imagemask } 83 /G53 MSTT31c1f0 AddChar /G6d [78.0 0.0 1.0 0.0 77.0 46.0] /G6d { 76 46 true [1 0 0 -1 -1.0 46.0] {<000e001fc00003f80000007e00fff0001ffe000003fe01fffc007fff00000ffe07fffe00ffff8000 7ffe0fffff01ffffc000fffe1fffff03ffffe00047fe3e07ff87c07fe00003fe7801ff8f003ff000 03fee000ff9c001ff00001ffc0007ff8000ff00001ff80007ff0000ff80001ff00007fe00007f800 01fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f800 01fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f800 01fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f800 01fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f800 01fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f800 01fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f800 01fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f80001fe00003fc00007f800 01fe00003fc00007f80003ff00007fe0000ffc0003ff00007fe0000ffc000fffc001fff8003fff00 fffffc1fffff83fffff0fffffc1fffff83fffff0>} imagemask } 109 /G6d MSTT31c1f0 AddChar /G6c [28.0 0.0 3.0 0.0 25.0 70.0] /G6c { 22 70 true [1 0 0 -1 -3.0 70.0] {<000e00007e0003fe000ffe007ffe00fffe0047fe0003fe0001fe0001fe0001fe0001fe0001fe0001 fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe 0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe00 01fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001 fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0001fe0003ff0003ff 000fffc0fffffcfffffc>} imagemask } 108 /G6c MSTT31c1f0 AddChar /G64 [50.0 0.0 3.0 -1.0 49.0 70.0] /G64 { 46 71 true [1 0 0 -1 -3.0 70.0] {<000000000e00000000007e0000000003fe000000000ffe000000007ffe00000000fffe00000000c7 fe0000000003fe0000000003fe0000000001fe0000000001fe0000000001fe0000000001fe000000 0001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe00 00000001fe0000000001fe0000000001fe0000000001fe0000007f81fe000003fff1fe00000ffff9 fe00003f81fdfe00007e007ffe0000fc001ffe0001f8000ffe0003f00007fe0003e00007fe0007e0 0003fe000fc00003fe000fc00003fe001f800001fe001f800001fe003f800001fe003f000001fe00 7f000001fe007f000001fe007f000001fe007f000001fe00ff000001fe00ff000001fe00ff000001 fe00ff000001fe00ff000001fe00ff000001fe00ff000001fe00ff800001fe00ff800001fe00ff80 0001fe00ff800001fe007fc00001fe007fc00001fe007fe00001fe003fe00001fe003ff00001fe00 3ff80001fe001ffc0003fe000ffe0007ff000fff801fff0007ffe07dff8c03fffff9fffc01fffff1 fff800ffffe1ffc0003fffc1ff00001fff01f8000003fc01c000>} imagemask } 100 /G64 MSTT31c1f0 AddChar /G68 [50.0 0.0 1.0 0.0 50.0 70.0] /G68 { 49 70 true [1 0 0 -1 -1.0 70.0] {<000e0000000000007e000000000003fe00000000000ffe00000000007ffe0000000000fffe000000 0000c7fe000000000003fe000000000001fe000000000001fe000000000001fe000000000001fe00 0000000001fe000000000001fe000000000001fe000000000001fe000000000001fe000000000001 fe000000000001fe000000000001fe000000000001fe000000000001fe000000000001fe00000000 0001fe000000000001fe001fc0000001fe00fff0000001fe03fff8000001fe07fffc000001fe0fff fe000001fe1fffff000001fe3e07ff000001fe7801ff800001fee000ff800001ffc0007f800001ff 80007f800001ff00007fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc000 01fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003f c00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00 003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001 fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc00001fe00003fc0 0001fe00003fc00001fe00003fc00003ff00007fe00003ff00007fe0000fffc001fff800fffffc1f ffff80fffffc1fffff80>} imagemask } 104 /G68 MSTT31c1f0 AddChar /G72 [33.0 0.0 1.0 0.0 33.0 46.0] /G72 { 32 46 true [1 0 0 -1 -1.0 46.0] {<000e00f0007e03fc01fe07fe0ffe0ffe7ffe1ffffffe3fffc7fe3fff03fe71ff01fee0fe01fec07e 01ffc01c01ff800001ff000001ff000001fe000001fe000001fe000001fe000001fe000001fe0000 01fe000001fe000001fe000001fe000001fe000001fe000001fe000001fe000001fe000001fe0000 01fe000001fe000001fe000001fe000001fe000001fe000001fe000001fe000001fe000001fe0000 01ff000003ff000003ff80000fffe000fffffe00fffffe00>} imagemask } 114 /G72 MSTT31c1f0 AddChar %%EndResource 1 7 SJ 586 758 2329 (Some installations need a mechanism to control allocation) 2329 SB 1 2 SJ 586 878 521 (of disk space) 521 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1051 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G71 [50.0 0.0 3.0 -21.0 49.0 46.0] /G71 { 46 67 true [1 0 0 -1 -3.0 46.0] {<00003fe00e000001fffc1e000007ffff7e00001fc07ffe00003f001ffe0000fc000ffe0001f80007 fe0003f00003fe0007e00003fe0007e00001fe000fc00001fe001fc00001fe001f800001fe003f80 0001fe003f800001fe003f800001fe007f000001fe007f000001fe007f000001fe007f000001fe00 ff000001fe00ff000001fe00ff000001fe00ff000001fe00ff000001fe00ff000001fe00ff000001 fe00ff800001fe00ff800001fe00ff800001fe00ff800001fe007fc00001fe007fc00001fe007fe0 0001fe007fe00001fe003ff00003fe003ff80003fe001ffc0007fe001fff001dfe000fffc079fe00 07fffff9fe0007fffff1fe0003ffffe1fe0001ffff81fe00007fff01fe00003ffc01fe000007f001 fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe000000 0001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe00 00000001fe0000000001fe0000000003ff0000000003ff000000000fffc0000000fffffc000000ff fffc>} imagemask } 113 /G71 MSTT31c1f0 AddChar /G75 [50.0 0.0 1.0 -1.0 50.0 45.0] /G75 { 49 46 true [1 0 0 -1 -1.0 45.0] {} imagemask } 117 /G75 MSTT31c1f0 AddChar /G77 [72.0 0.0 1.0 -1.0 73.0 45.0] /G77 { 72 46 true [1 0 0 -1 -1.0 45.0] {} imagemask } 119 /G77 MSTT31c1f0 AddChar %%EndResource 586 1021 2192 (Disk quotas allow the administrator to set limits on the) 2192 SB %%BeginResource: font MSTT31c1f0 /G62 [50.0 0.0 1.0 -1.0 47.0 70.0] /G62 { 46 71 true [1 0 0 -1 -1.0 70.0] {<000e00000000007e0000000003fe000000000ffe000000007ffe00000000fffe00000000c7fe0000 000003fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe 0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe00000000 01fe0000000001fe0000000001fe0000000001fe0000000001fe003f800001fe01ffe00001fe07ff f80001fe0ffffe0001fe1fffff0001fe3fffff8001fe7fffff8001fefc0fffc001fff001ffe001ff c000ffe001ff80007ff001ff00003ff001fe00001ff801fe00001ff801fe00000ff801fe00000ff8 01fe000007fc01fe000007fc01fe000007fc01fe000003fc01fe000003fc01fe000003fc01fe0000 03fc01fe000003fc01fe000003fc01fe000003fc01fe000003fc01fe000003f801fe000003f801fe 000003f801fe000003f801fe000007f001fe000007f001fe000007f001fe000007e001fe00000fc0 01fe00000fc001fe00001f8001fe00001f0001fe00003e0001ff80007c0001ffc000f80000fff001 f000003ffc0fe000000fffff80000001fffe000000003ff00000>} imagemask } 98 /G62 MSTT31c1f0 AddChar /G2f [28.0 0.0 0.0 -1.0 28.0 70.0] /G2f { 28 71 true [1 0 0 -1 0.0 70.0] {<000000f0000001f0000001e0000001e0000003e0000003c0000003c0000007c00000078000000780 00000f8000000f0000000f0000001f0000001e0000001e0000003e0000003c0000003c0000007c00 00007800000078000000f8000000f0000000f0000001f0000001e0000001e0000003e0000003c000 0003c0000007c0000007800000078000000f0000000f0000000f0000001e0000001e0000001e0000 003c0000003c0000003c000000780000007800000078000000f0000000f0000000f0000001e00000 01e0000001e0000003c0000003c0000003c000000780000007800000078000000f0000000f000000 0f0000001e0000001e0000001e0000003c0000003c0000003c000000780000007800000078000000 f0000000>} imagemask } 47 /G2f MSTT31c1f0 AddChar /G3a [28.0 0.0 9.0 -1.0 20.0 46.0] /G3a { 11 47 true [1 0 0 -1 -9.0 46.0] {<1f003f807fc0ffe0ffe0ffe0ffe0ffe07fc03f801f00000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000001f003f807fc0ffe0 ffe0ffe0ffe0ffe07fc03f801f00>} imagemask } 58 /G3a MSTT31c1f0 AddChar %%EndResource 2 5 SJ 586 1141 1589 (number of allocated blocks and/or files:) 1589 SB %%BeginResource: font MSTT31c1fd /MSTT31c1fd [75.0 0 0 0 0 0] 53 -104 [-75.0 -75.0 75.0 75.0] [1 75 div 0 0 1 75 div 0 0] /MSTT31c1fd GreNewFont %%EndResource 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font %%BeginResource: font MSTT31c1fd /G96 [38.0 0.0 -1.0 17.0 39.0 20.0] /G96 { 40 3 true [1 0 0 -1 1.0 20.0] {} imagemask } 150 /G96 MSTT31c1fd AddChar %%EndResource 623 1280 38 (\226) 38 SB %%BeginResource: font MSTT31c1fd /G6c [21.0 0.0 3.0 0.0 19.0 52.0] /G6c { 16 52 true [1 0 0 -1 -3.0 52.0] {<00e003e00fe07fe0dfe00fe007e007e007e007e007e007e007e007e007e007e007e007e007e007e0 07e007e007e007e007e007e007e007e007e007e007e007e007e007e007e007e007e007e007e007e0 07e007e007e007e007e007e007e007e007e00ff01ff8ffff>} imagemask } 108 /G6c MSTT31c1fd AddChar /G69 [21.0 0.0 3.0 0.0 19.0 52.0] /G69 { 16 52 true [1 0 0 -1 -3.0 52.0] {<03c007e00ff00ff00ff00ff007e003c000000000000000000000000000000000000000e003e00fe0 7fe0dfe00fe007e007e007e007e007e007e007e007e007e007e007e007e007e007e007e007e007e0 07e007e007e007e007e007e007e007e007e00ff01ff8ffff>} imagemask } 105 /G69 MSTT31c1fd AddChar /G6d [57.0 0.0 1.0 0.0 57.0 35.0] /G6d { 56 35 true [1 0 0 -1 -1.0 35.0] {<00e00fc001f80003e07fe007fe000fe0fff81fff007fe3fff83fff80dfe783fc783fc00fee01fce0 1fc007f800ffc00fc007f000ff000fe007e0007e0007e007e0007e0007e007e0007e0007e007e000 7e0007e007e0007e0007e007e0007e0007e007e0007e0007e007e0007e0007e007e0007e0007e007 e0007e0007e007e0007e0007e007e0007e0007e007e0007e0007e007e0007e0007e007e0007e0007 e007e0007e0007e007e0007e0007e007e0007e0007e007e0007e0007e007e0007e0007e007e0007e 0007e007e0007e0007e007e0007e0007e007e0007e0007e00ff000ff000ff01ff801ff801ff8ffff 0ffff0ffff>} imagemask } 109 /G6d MSTT31c1fd AddChar /G74 [21.0 0.0 0.0 -1.0 21.0 45.0] /G74 { 21 46 true [1 0 0 -1 0.0 45.0] {<00100000300000300000700000700000f00000f00001f00003f00007f0001ff0007ffff0fffff003 f00003f00003f00003f00003f00003f00003f00003f00003f00003f00003f00003f00003f00003f0 0003f00003f00003f00003f00003f00003f00003f00003f00003f00003f00003f00003f00003f018 03f83001fc7001ffe000ffc000ff80003e00>} imagemask } 116 /G74 MSTT31c1fd AddChar /G73 [29.0 0.0 4.0 -1.0 27.0 35.0] /G73 { 23 36 true [1 0 0 -1 -4.0 35.0] {<01fe0807fff81e03f83c00f8780078700038700038f00018f00018f80008fc0008fe00007f80007f e0003ff8001ffe000fff0003ffc001ffe0007ff0001ff80007fc0001fc0000fe00007e80007e8000 3ec0003ec0003ee0003cf0003cf80078fc00f0ff81e0ffff8083fe00>} imagemask } 115 /G73 MSTT31c1fd AddChar /G20 [19.0 0.0 0.0 0.0 0.0 0.0] /G20 { } 32 /G20 MSTT31c1fd AddChar /G61 [33.0 0.0 3.0 -1.0 34.0 35.0] /G61 { 31 36 true [1 0 0 -1 -3.0 35.0] {<007fc00003fff80007c1fc001f007e003e003f003e003f007e001f807e001f807e001f807e001f80 7e001f803c001f8000003f800001ff800007df80003f1f8000f81f8001e01f8007c01f800f801f80 1f001f803e001f807e001f807c001f80fc001f80fc001f80fc001f80fc001f80fe003f80fe007f82 7f00ff867f83dfce3fff1ffc3ffe1ff81ff80fe007e00780>} imagemask } 97 /G61 MSTT31c1fd AddChar /G72 [25.0 0.0 1.0 0.0 25.0 35.0] /G72 { 24 35 true [1 0 0 -1 -1.0 35.0] {<00e07c03e0fe0fe1ff7fe3ffdfe7ff0fee7f07ec3e07f80e07f00007f00007e00007e00007e00007 e00007e00007e00007e00007e00007e00007e00007e00007e00007e00007e00007e00007e00007e0 0007e00007e00007e00007e00007f0000ff0001ffc00ffff00>} imagemask } 114 /G72 MSTT31c1fd AddChar /G65 [33.0 0.0 3.0 -1.0 31.0 35.0] /G65 { 28 36 true [1 0 0 -1 -3.0 35.0] {<001fe000007ffc0001c1fe0003807f0007003f800e001fc01c001fe03c000fe038000fe038000ff0 78000ff07ffffff07ffffff0f8000000f8000000f8000000f8000000f8000000fc000000fc000000 fc000000fc000000fe000010fe0000307f0000307f8000607fc000603fe000e03ff001c01ffc07c0 0fffff8007ffff0003fffe0001fffc0000fff800001fc000>} imagemask } 101 /G65 MSTT31c1fd AddChar /G6e [38.0 0.0 1.0 0.0 37.0 35.0] /G6e { 36 35 true [1 0 0 -1 -1.0 35.0] {<00e01f800003e07fe0000fe0fff0007fe3fff800dfe783fc000fee01fc0007fc00fc0007f000fe00 07e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e00 07e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e00 07e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e00 0ff000ff001ff801ff80ffff0ffff0>} imagemask } 110 /G6e MSTT31c1fd AddChar /G67 [37.0 0.0 2.0 -16.0 36.0 35.0] /G67 { 34 51 true [1 0 0 -1 -2.0 35.0] {<000ff00000003ffc000000f83f000001f00fffc003e00fffc007c007e0000fc003f0000f8003f000 0f8003f8001f8001f8001f8001f8001f8001f8001f8001f8001f8001f8001f8001f8001fc001f800 0fc001f0000fc003f00007e003e00003e007c00001f007800000fc1f0000007ffe000000eff00000 01c0000000038000000007000000000f000000000f000000001f800000001ffff000001ffffff800 0ffffffe0007ffffff0003ffffff800307ffff800600000fc00e000001c01c000000c038000000c0 38000000c07800000080f800000180fc00000300fe00000600ff80001c007ff000f8003ffffff000 0fffffc00003ffff0000003ff00000>} imagemask } 103 /G67 MSTT31c1fd AddChar /G64 [38.0 0.0 3.0 -1.0 37.0 52.0] /G64 { 34 53 true [1 0 0 -1 -3.0 52.0] {<0000003800000000f800000003f80000001ff800000037f800000003f800000001f800000001f800 000001f800000001f800000001f800000001f800000001f800000001f800000001f800000001f800 000001f800000fe1f800003ff9f80000f83df80001e01ff80003c00ff800078007f8000f0003f800 1f0003f8001e0001f8003e0001f8003e0001f8007c0001f8007c0001f8007c0001f8007c0001f800 fc0001f800fc0001f800fc0001f800fc0001f800fc0001f800fc0001f800fc0001f800fe0001f800 fe0001f8007e0001f8007f0001f8007f0001f8003f8001f8003fc001f8001fe003f8001ff00ffc00 0ffc1dfec007fff9ff8003fff1fc0000ffe1f000003f81c000>} imagemask } 100 /G64 MSTT31c1fd AddChar /G6f [38.0 0.0 3.0 -1.0 35.0 35.0] /G6f { 32 36 true [1 0 0 -1 -3.0 35.0] {<000ff000003ffe0000f83f8003e01fc007c00fe0078007f00f0003f81f0003f81f0001fc3e0001fc 3e0000fe7e0000fe7e0000fe7e00007ffe00007ffe00007ffe00007ffe00007ffe00007ffe00007f fe00007ffe00007fff00007e7f00007e7f00007e7f00007c3f80007c3f8000f81fc000f81fc000f0 0fe001e007f003e003f8078001fe0f00007ffc00000ff000>} imagemask } 111 /G6f MSTT31c1fd AddChar /G66 [24.0 0.0 2.0 0.0 32.0 52.0] /G66 { 30 52 true [1 0 0 -1 -2.0 52.0] {<00007f000001ffc000070ff0000e07f8001c03fc003c01fc007800fc007800fc00f8003800f80000 00f8000001f8000001f8000001f8000001f8000001f8000001f8000001f80000fffffc00fffffc00 01f8000001f8000001f8000001f8000001f8000001f8000001f8000001f8000001f8000001f80000 01f8000001f8000001f8000001f8000001f8000001f8000001f8000001f8000001f8000001f80000 01f8000001f8000001f8000001f8000001f8000001f8000001f8000001f8000003fc000007fc0000 0fff0000fffff800>} imagemask } 102 /G66 MSTT31c1fd AddChar /G79 [36.0 0.0 0.0 -16.0 36.0 34.0] /G79 { 36 50 true [1 0 0 -1 0.0 34.0] {} imagemask } 121 /G79 MSTT31c1fd AddChar /G62 [38.0 0.0 1.0 -1.0 35.0 52.0] /G62 { 34 53 true [1 0 0 -1 -1.0 52.0] {<00e000000003e00000000fe00000007fe0000000dfe00000000fe000000007e000000007e0000000 07e000000007e000000007e000000007e000000007e000000007e000000007e000000007e0000000 07e000000007e03f800007e0ffe00007e1fff00007e3fff80007e7fffc0007ef07fe0007fc01ff00 07f800ff0007f0007f8007e0003f8007e0003f8007e0001f8007e0001fc007e0001fc007e0000fc0 07e0000fc007e0000fc007e0000fc007e0000fc007e0000fc007e0000fc007e0000fc007e0000f80 07e0000f8007e0001f8007e0001f0007e0001f0007e0001e0007e0003e0007e0003c0007e0007800 07f800f00007fc01e00001ff078000003ffe00000007f80000>} imagemask } 98 /G62 MSTT31c1fd AddChar %%EndResource 5 7 SJ 717 1280 1226 (limits are managed on a file system basis) 1226 SB 623 1388 38 (\226) 38 SB %%BeginResource: font MSTT31c1fd /G71 [38.0 0.0 3.0 -16.0 37.0 35.0] /G71 { 34 51 true [1 0 0 -1 -3.0 35.0] {<0007f81800003ffe780000f81ff80001e00ff80003c007f800078003f8000f0003f8001f0001f800 1e0001f8003e0001f8003e0001f8007c0001f8007c0001f8007c0001f800fc0001f800fc0001f800 fc0001f800fc0001f800fc0001f800fc0001f800fc0001f800fc0001f800fe0001f800fe0001f800 fe0001f8007f0001f8007f0001f8007f8001f8003fc003f8003fe007f8001ff81df8000ffff9f800 07fff1f80003ffe1f80001ff81f800007e01f800000001f800000001f800000001f800000001f800 000001f800000001f800000001f800000001f800000001f800000001f800000001f800000001f800 000003fc00000007fe0000003fffc0>} imagemask } 113 /G71 MSTT31c1fd AddChar /G75 [38.0 0.0 1.0 -1.0 37.0 34.0] /G75 { 36 35 true [1 0 0 -1 -1.0 34.0] {} imagemask } 117 /G75 MSTT31c1fd AddChar /G63 [33.0 0.0 3.0 -1.0 31.0 35.0] /G63 { 28 36 true [1 0 0 -1 -3.0 35.0] {<000ff000007ffc0000f07f0003c03f8007801fc00f001fc01f000fe01e000fe03e000fe03e0007e0 7c0003c07c0000007c000000fc000000fc000000fc000000fc000000fc000000fc000000fe000000 fe000000fe000000ff0000107f0000307f0000307f8000607fc000603fe000c03ff001c01ffc0f80 0fffff8007ffff0003fffe0001fffc0000fff000001f8000>} imagemask } 99 /G63 MSTT31c1fd AddChar /G77 [53.0 0.0 1.0 -1.0 53.0 34.0] /G77 { 52 35 true [1 0 0 -1 -1.0 34.0] {} imagemask } 119 /G77 MSTT31c1fd AddChar /G68 [38.0 0.0 1.0 0.0 37.0 52.0] /G68 { 36 52 true [1 0 0 -1 -1.0 52.0] {<00e000000003e00000000fe00000007fe0000000dfe00000000fe000000007e000000007e0000000 07e000000007e000000007e000000007e000000007e000000007e000000007e000000007e0000000 07e000000007e01f800007e07fe00007e0fff00007e3fff80007e783f80007ee01fc0007fc00fc00 07f000fe0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e00 07e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e00 07e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e0007e00 07e0007e000ff000ff001ff801ff80ffff0ffff0>} imagemask } 104 /G68 MSTT31c1fd AddChar /G70 [38.0 0.0 1.0 -16.0 35.0 35.0] /G70 { 34 51 true [1 0 0 -1 -1.0 35.0] {<00e01f800003e07fe0000fe1fff0007fe3fff800ffe7fffc000fef07fe0007ee01ff0007f800ff00 07f0007f8007e0003f8007e0003f8007e0001f8007e0001fc007e0001fc007e0001fc007e0000fc0 07e0000fc007e0000fc007e0000fc007e0000fc007e0000fc007e0000fc007e0000f8007e0000f80 07e0000f8007e0001f0007e0001f0007e0001f0007e0003e0007f0003c0007f0007c0007f8007800 07fc00f00007ff03e00007e7ff800007e1fe000007e000000007e000000007e000000007e0000000 07e000000007e000000007e000000007e000000007e000000007e000000007e000000007e0000000 0ff00000001ff8000000ffff000000>} imagemask } 112 /G70 MSTT31c1fd AddChar %%EndResource 717 1388 1558 (quotas can be associated with users and user groups) 1558 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB %%BeginResource: font MSTT31c1bc /G34 [29.0 0.0 1.0 0.0 26.0 40.0] /G34 { 25 40 true [1 0 0 -1 -1.0 40.0] {<0000f0000000f0000001f0000001f0000003f0000007f0000007f000000df000001df0000019f000 0031f0000031f0000061f00000e1f00000c1f0000181f0000181f0000301f0000701f0000601f000 0c01f0000c01f0001801f0003801f0003001f0006001f000e001f000ffffff80ffffff80ffffff80 0001f0000001f0000001f0000001f0000001f0000001f0000001f0000001f0000001f0000001f000 >} imagemask } 52 /G34 MSTT31c1bc AddChar %%EndResource 2919 2191 29 (4) 29 SB 32 0 0 167 167 0 0 0 150 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d0439a4b687a9024e596c4b1dde5fe3f345cafae8cf4c808fb96646624e02e6ffc7fee976c6bc04297090beef82b38032beb8ee2f 6bc81681d15818312c65bab2e7a843bdd3f258a0a30ee0b1c119aff67bb748720cea1369ef4bc2b2aa5b4c1af425550815b3e5607df8333913f207b8e5750be8 ea52046b1728bbe207ca2300df72213da0e76feaea3f072404ebb5a7d7c446ac0c712bebbc02a47962fbd614355b5948e7d659101d06ea214be3a60a4699f41f ba51b6a14fd6436539f3f3f178ea676bf5eb0ccb02b42c86d0ea544cefcebaf0d98921a2ccdf71b977889a5a877dbe0dad197f68c7b9d48da8c3268038eb4550 7174185a8934678b3172e281758f08f294af4f839c9cba87637bf400551254e6e21cda 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -6 3 SJ 256 284 1650 (Principles of disk quotas) 1650 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G67 [49.0 0.0 3.0 -21.0 47.0 46.0] /G67 { 44 67 true [1 0 0 -1 -3.0 46.0] {<0000ff8000000007fff80000001f81fe0000003e007ffff000fc003ffff001f8001ffff001f8001f f00003f0000ff00007f0000ff80007e00007f8000fe00007f8000fe00007fc000fe00003fc001fe0 0003fc001fe00003fc001fe00003fc001fe00003fc001fe00003fc001fe00003fc001fe00003fc00 1ff00003f8000ff00003f8000ff00003f80007f80007f00007f80007e00003fc0007e00003fc000f c00001fe001f8000007f003f0000003fc0fc0000001ffff000000038ff80000000700000000000e0 0000000003e00000000007c00000000007c0000000000fc0000000001ff0000000001fffffc00000 1ffffffff0001ffffffffe000fffffffff0007ffffffff8003ffffffffc000ffffffffe001c0ffff ffe003c000001ff00780000001f00700000000f00f00000000701e00000000703e00000000703e00 000000607e00000000e07e00000000e0ff00000001c0ff8000000380ffe000000f00fff800003e00 7fff8003fc003ffffffff8001ffffffff00007ffffffc00001ffffff0000007ffff800000007ff80 0000>} imagemask } 103 /G67 MSTT31c1f0 AddChar %%EndResource 4 9 SJ 586 614 2281 (Disk quotas can be associated with users and user groups) 2281 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 788 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G54 [61.0 0.0 3.0 0.0 59.0 67.0] /G54 { 56 67 true [1 0 0 -1 -3.0 67.0] {<7ffffffffffffe7ffffffffffffe7ffffffffffffe7f8001ff0003fe7e0001ff00007e7c0001ff00 003e780001ff00001ef00001ff00000fe00001ff000007e00001ff000007e00001ff000007c00001 ff000003c00001ff000003c00001ff000003000001ff000000000001ff000000000001ff00000000 0001ff000000000001ff000000000001ff000000000001ff000000000001ff000000000001ff0000 00000001ff000000000001ff000000000001ff000000000001ff000000000001ff000000000001ff 000000000001ff000000000001ff000000000001ff000000000001ff000000000001ff0000000000 01ff000000000001ff000000000001ff000000000001ff000000000001ff000000000001ff000000 000001ff000000000001ff000000000001ff000000000001ff000000000001ff000000000001ff00 0000000001ff000000000001ff000000000001ff000000000001ff000000000001ff000000000001 ff000000000001ff000000000001ff000000000001ff000000000001ff000000000001ff00000000 0001ff000000000001ff000000000001ff000000000001ff000000000003ff800000000003ff8000 00000007ffc0000000001ffff000000003ffffff80000003ffffff8000>} imagemask } 84 /G54 MSTT31c1f0 AddChar /G79 [47.0 0.0 0.0 -21.0 47.0 45.0] /G79 { 47 66 true [1 0 0 -1 0.0 45.0] {} imagemask } 121 /G79 MSTT31c1f0 AddChar %%EndResource 5 10 SJ 586 758 2328 (They limit the number of blocks and the number of inodes) 2328 SB %%BeginResource: font MSTT31c1f0 /G28 [33.0 0.0 4.0 -21.0 31.0 69.0] /G28 { 27 90 true [1 0 0 -1 -4.0 69.0] {<00000020000000e0000003c00000078000001e0000003c00000078000000f0000001e0000003c000 00078000000f8000001f0000003e0000003e0000007c000000fc000000f8000001f8000003f80000 03f0000007f0000007f000000fe000000fe000000fe000001fe000001fe000001fc000003fc00000 3fc000003fc000007fc000007fc000007f8000007f8000007f8000007f800000ff800000ff800000 ff800000ff800000ff800000ff800000ff800000ff800000ff800000ff800000ff800000ff800000 ff800000ff8000007f8000007f8000007fc000007fc000007fc000007fc000003fc000003fc00000 3fc000001fc000001fe000001fe000000fe000000fe0000007f0000007f0000007f0000003f00000 03f8000001f8000000fc000000fc0000007c0000003e0000003f0000001f0000000f80000007c000 0003c0000001e0000000f0000000780000003c0000000f0000000780000001c0000000e000000020 >} imagemask } 40 /G28 MSTT31c1f0 AddChar /G29 [33.0 0.0 2.0 -21.0 29.0 69.0] /G29 { 27 90 true [1 0 0 -1 -2.0 69.0] {<80000000e0000000780000003c0000001f0000000780000003c0000001e0000000f0000000780000 007c0000003e0000001f0000001f8000000f80000007c0000007e0000003e0000003f0000003f800 0001f8000001fc000001fc000001fc000000fe000000fe000000ff000000ff0000007f0000007f80 00007f8000007f8000007fc000007fc000007fc000007fc000003fc000003fc000003fe000003fe0 00003fe000003fe000003fe000003fe000003fe000003fe000003fe000003fe000003fe000003fe0 00003fe000003fe000003fc000003fc000003fc000003fc000007fc000007fc000007f8000007f80 00007f8000007f000000ff000000ff000000fe000000fe000000fe000001fc000001fc000001f800 0003f8000003f0000003e0000007e0000007c000000f8000000f8000001f0000003e0000003c0000 0078000000f0000001e0000003c00000078000000f0000003c00000078000000e000000080000000 >} imagemask } 41 /G29 MSTT31c1f0 AddChar %%EndResource 4 7 SJ 586 878 1804 (\(files\) that a user/group is allowed to allocate) 1804 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1051 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G4c [59.0 0.0 2.0 0.0 57.0 67.0] /G4c { 55 67 true [1 0 0 -1 -2.0 67.0] {} imagemask } 76 /G4c MSTT31c1f0 AddChar %%EndResource 586 1021 288 (Limits:) 288 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 623 1160 38 (\226) 38 SB 717 1160 402 (current usage) 402 SB 623 1268 38 (\226) 38 SB %%BeginResource: font MSTT31c1fd /G3a [21.0 0.0 7.0 -1.0 15.0 35.0] /G3a { 8 36 true [1 0 0 -1 -7.0 35.0] {<3c7effffffff7e3c00000000000000000000000000000000000000003c7effffffff7e3c>} imagemask } 58 /G3a MSTT31c1fd AddChar /G78 [37.0 0.0 0.0 0.0 37.0 34.0] /G78 { 37 34 true [1 0 0 -1 0.0 34.0] {} imagemask } 120 /G78 MSTT31c1fd AddChar /G6b [37.0 0.0 1.0 0.0 37.0 52.0] /G6b { 36 52 true [1 0 0 -1 -1.0 52.0] {<00e000000003e00000000fe00000007fe0000000dfe00000000fe000000007e000000007e0000000 07e000000007e000000007e000000007e000000007e000000007e000000007e000000007e0000000 07e000000007e000000007e007ffe007e003fe0007e001f00007e001e00007e001c00007e0030000 07e006000007e00c000007e038000007e070000007e0e0000007e1c0000007e380000007e7800000 07efc0000007ffe0000007efe0000007e7f0000007e3f8000007e3fc000007e1fe000007e0fe0000 07e07f000007e03f800007e03fc00007e01fe00007e00fe00007e007f00007e003f80007e003fc00 07e001fe000ff001ff801ff801fff0ffff07fff0>} imagemask } 107 /G6b MSTT31c1fd AddChar /G2f [21.0 0.0 0.0 -1.0 21.0 52.0] /G2f { 21 53 true [1 0 0 -1 0.0 52.0] {<0000380000780000700000700000e00000e00000e00001c00001c00001c000038000038000038000 0700000700000700000e00000e00000e00001c00001c00001c000038000038000038000070000070 0000700000e00000e00000e00001c00001c00001c000038000038000038000070000070000070000 0e00000e00000e00001c00001c00001c0000380000380000380000700000700000700000e00000>} imagemask } 47 /G2f MSTT31c1fd AddChar %%EndResource 717 1268 2212 (soft limit: maximal number of blocks/inodes that a user/group is expected) 2212 SB -1 1 SJ 717 1359 220 (to need) 220 SB 623 1467 38 (\226) 38 SB 717 1467 2205 (hard limit: maximal number of blocks/inodes that a user/group is allowed) 2205 SB -1 1 SJ 717 1557 311 (to allocate) 311 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB %%BeginResource: font MSTT31c1bc /G35 [29.0 0.0 3.0 0.0 25.0 39.0] /G35 { 22 39 true [1 0 0 -1 -3.0 39.0] {<00fffc00fff801fff801fff003fff00300000600000600000c00000c00001f80001ff0003ffc003f fe007fff8003ffc0007fc0001fe00007f00003f00001f00000f80000f80000780000780000780000 780000780000700000700000700000e00000c00001c0700380fc0f00fffc007ff8001fc000>} imagemask } 53 /G35 MSTT31c1bc AddChar %%EndResource 2919 2191 29 (5) 29 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d013dcfd52cf6001bd0d7663003bf0bea02713009112d390690aa8cec87224298d4c086f147a6b31276874f777b1552311010bf1a 02aa65d153b06e732c7e0ffde68b3179b32ebd2d3d8bc355078d5346e8a53371f430cca006c34facac0d84562ed903c711b1506f186956159070ec7f114ff4d3 59e5ee8ff1d184226fed9ea73198dfc19f44a91fe1380a15adaabcc4c52aa3c0690bcddedd640992169f01e19541e67a31503a333d47c5bde2cf24604721b6f0 be8540fe1805b6425f3999bf18b8b12287e1ba05c78f36d229d0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource 256 305 1695 (Principles of disk quotas \(2\)) 1695 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G57 [95.0 0.0 3.0 -1.0 94.0 67.0] /G57 { 91 68 true [1 0 0 -1 -3.0 67.0] {} imagemask } 87 /G57 MSTT31c1f0 AddChar /G2c [25.0 0.0 5.0 -16.0 20.0 10.0] /G2c { 15 26 true [1 0 0 -1 -5.0 10.0] {<0f803fe07ff0fff8fffcfffcfffcfffe7ffe3ffe1f0e000e000e000e001c001c00180038007000e0 01c003800f007c00f0008000>} imagemask } 44 /G2c MSTT31c1f0 AddChar %%EndResource 4 9 SJ 586 614 2101 (When the soft limit is reached, a warning message is) 2101 SB 586 734 283 (printed) 283 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 908 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G78 [51.0 0.0 1.0 0.0 49.0 45.0] /G78 { 48 45 true [1 0 0 -1 -1.0 45.0] {} imagemask } 120 /G78 MSTT31c1f0 AddChar %%EndResource 6 9 SJ 586 878 2329 (The hard limit cannot be exceeded \(system calls return the) 2329 SB 2 1 SJ 586 998 218 (error ) 218 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 806 1002 360 (EDQUOT) 360 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1166 998 33 (\)) 33 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1171 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G47 [72.0 0.0 4.0 -1.0 71.0 68.0] /G47 { 67 69 true [1 0 0 -1 -4.0 68.0] {<0000000fff00030000000001fffff0030000000007fffffe03000000001ffc00ffc7000000007fc0 001fff00000001ff000007ff80000003fe000001ff80000007f8000000ff8000000ff00000007f80 00001fe00000003f8000003fc00000001f8000007f800000000f800000ff800000000f800001ff00 00000007800001ff0000000007800003fe0000000003800007fc0000000003c00007fc0000000001 c0000ffc0000000001c0000ff80000000000c0001ff80000000000c0001ff8000000000000003ff0 000000000000003ff0000000000000003ff0000000000000007ff0000000000000007ff000000000 0000007fe0000000000000007fe0000000000000007fe000000000000000ffe000000000000000ff e00000007fffffe0ffe00000007fffffe0ffe000000003fffe00ffe000000000fff800ffe0000000 007ff000ffe0000000007ff000ffe0000000003fe000ffe0000000003fe000ffe0000000003fe000 fff0000000003fe000fff0000000003fe0007ff0000000003fe0007ff0000000003fe0007ff00000 00003fe0007ff8000000003fe0003ff8000000003fe0003ff8000000003fe0001ffc000000003fe0 001ffc000000003fe0001ffe000000003fe0000ffe000000003fe0000fff000000003fe00007ff00 0000003fe00003ff800000003fe00003ff800000003fe00001ffc00000003fe00000ffe00000003f e000007ff00000003fe000003ff80000003fe000001ffc0000003fe000000ffe0000003fe0000007 ff8000003fe0000001ffc00000ffc00000007ff80007ff000000001fff003ffc0000000007ffffff f00000000000ffffff00000000000007ffe0000000>} imagemask } 71 /G47 MSTT31c1f0 AddChar %%EndResource 2 1 SJ 586 1141 545 (Grace period:) 545 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 623 1280 38 (\226) 38 SB %%BeginResource: font MSTT31c1fd /G37 [38.0 0.0 3.0 -1.0 35.0 50.0] /G37 { 32 51 true [1 0 0 -1 -3.0 50.0] {<07ffffff0fffffff0fffffff0ffffffe1ffffffe1ffffffe3ffffffc3e00003c3800007c70000078 60000078400000f8c00000f0000000f0000001f0000001e0000001e0000003e0000003c0000003c0 00000780000007800000078000000f0000000f0000000f0000001e0000001e0000001e0000003c00 00003c0000003c000000780000007800000078000000f0000000f0000000f0000001e0000001e000 0003e0000003c0000003c0000007c0000007800000078000000f8000000f0000000f0000001f0000 001e0000>} imagemask } 55 /G37 MSTT31c1fd AddChar %%EndResource 2 3 SJ 717 1280 513 (7 days by default) 513 SB 623 1388 38 (\226) 38 SB %%BeginResource: font MSTT31c1fd /G57 [70.0 0.0 2.0 -1.0 70.0 50.0] /G57 { 68 51 true [1 0 0 -1 -2.0 50.0] {} imagemask } 87 /G57 MSTT31c1fd AddChar /G76 [37.0 0.0 1.0 -1.0 36.0 34.0] /G76 { 35 35 true [1 0 0 -1 -1.0 34.0] {} imagemask } 118 /G76 MSTT31c1fd AddChar /G2c [19.0 0.0 3.0 -12.0 14.0 7.0] /G2c { 11 19 true [1 0 0 -1 -3.0 7.0] {<1e007f80ff80ffc0ffe0ffe07fe03c6000600060004000c000c0018003000e001800f0008000>} imagemask } 44 /G2c MSTT31c1fd AddChar /G28 [25.0 0.0 3.0 -16.0 23.0 52.0] /G28 { 20 68 true [1 0 0 -1 -3.0 52.0] {<0000100000600000c0000380000600000e00001c0000380000700000f00001e00001e00003c00007 c00007c0000f80000f80001f80001f80001f00003f00003f00003f00007f00007f00007e00007e00 007e0000fe0000fe0000fe0000fe0000fe0000fe0000fe0000fe0000fe0000fe0000fe0000fe0000 7e00007e00007f00007f00007f00003f00003f00003f00001f00001f80000f80000f80000f800007 c00003c00003c00001e00000e00000f000007800003800001c00000e000007000003800000c00000 60000010>} imagemask } 40 /G28 MSTT31c1fd AddChar %%EndResource 717 1388 2078 (When this period is over, the soft limit is treated as the hard limit \(no) 2078 SB %%BeginResource: font MSTT31c1fd /G29 [25.0 0.0 2.0 -16.0 22.0 52.0] /G29 { 20 68 true [1 0 0 -1 -2.0 52.0] {<8000006000003000001c00000e000007000003800001c00001e00000f000007800007800003c0000 3c00003e00001f00001f00001f80001f80000f80000fc0000fc0000fc0000fe0000fe0000fe00007 e00007e00007f00007f00007f00007f00007f00007f00007f00007f00007f00007f00007f00007f0 0007e00007e00007e0000fe0000fe0000fc0000fc0000fc0000f80001f80001f80001f00001f0000 3e00003e00003c0000780000780000f00000e00001c0000380000700000600001c00003000006000 00800000>} imagemask } 41 /G29 MSTT31c1fd AddChar %%EndResource -3 3 SJ 717 1478 942 (blocks/inodes can be allocated\)) 942 SB 623 1587 38 (\226) 38 SB %%BeginResource: font MSTT31c1fd /G54 [45.0 0.0 2.0 0.0 44.0 50.0] /G54 { 42 50 true [1 0 0 -1 -2.0 50.0] {<7fffffffff807fffffffff807c007f001f8078007f00078070007f000380e0007f0001c0c0007f00 00c0c0007f0000c0c0007f0000c0c0007f0000c080007f00004000007f00000000007f0000000000 7f00000000007f00000000007f00000000007f00000000007f00000000007f00000000007f000000 00007f00000000007f00000000007f00000000007f00000000007f00000000007f00000000007f00 000000007f00000000007f00000000007f00000000007f00000000007f00000000007f0000000000 7f00000000007f00000000007f00000000007f00000000007f00000000007f00000000007f000000 00007f00000000007f00000000007f00000000007f00000000007f00000000007f0000000000ff80 00000000ff8000000003ffe00000003ffffe0000>} imagemask } 84 /G54 MSTT31c1fd AddChar %%EndResource 717 1587 1652 (The current usage must be reduced below the soft limit) 1652 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2919 2191 29 (6) 29 SB 32 0 0 167 167 0 0 0 150 /MSTT31c1c9 font -12 3 SJ 256 284 2340 (Configuration of the quota-support) 2340 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G76 [50.0 0.0 1.0 -1.0 49.0 45.0] /G76 { 48 46 true [1 0 0 -1 -1.0 45.0] {} imagemask } 118 /G76 MSTT31c1f0 AddChar %%EndResource 9 10 SJ 586 614 2351 (Disk quotas have been available as a kernel patch for years) 2351 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 788 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G42 [66.0 0.0 2.0 0.0 61.0 67.0] /G42 { 59 67 true [1 0 0 -1 -2.0 67.0] {} imagemask } 66 /G42 MSTT31c1f0 AddChar %%EndResource 10 8 SJ 586 758 1973 (But they were not fully tested and contained bugs) 1973 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 932 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G41 [72.0 0.0 1.0 0.0 71.0 68.0] /G41 { 70 68 true [1 0 0 -1 -1.0 68.0] {<00000000100000000000000000380000000000000000380000000000000000780000000000000000 7c0000000000000000fc0000000000000000fe0000000000000000fe0000000000000001fe000000 0000000001ff0000000000000003ff0000000000000003ff8000000000000007ff80000000000000 07ffc00000000000000fffc00000000000000f7fc00000000000000f7fe00000000000001e3fe000 00000000001e3ff00000000000003c3ff00000000000003c1ff00000000000007c1ff80000000000 00780ff8000000000000f80ffc000000000000f007fc000000000000f007fe000000000001e007fe 000000000001e003fe000000000003c003ff000000000003c001ff000000000007c001ff80000000 00078001ff80000000000f8000ff80000000000f0000ffc0000000001f00007fc0000000001e0000 7fe0000000001e00007fe0000000003c00003ff0000000003c00003ff0000000007c00001ff00000 00007800001ff800000000f800000ff800000000f000000ffc00000001fffffffffc00000001ffff fffffc00000001fffffffffe00000003c0000003fe00000003c0000003ff0000000780000003ff00 00000780000001ff8000000f80000001ff8000000f00000000ff8000001f00000000ffc000001e00 0000007fc000001e000000007fe000003c000000007fe000003c000000003ff000007c000000003f f0000078000000003ff00000f8000000001ff80000f8000000001ffc0001f0000000001ffc0003f0 000000001ffe0003f8000000001fff000ffc000000003fff803fff00000000ffffe0fffff000000f fffffcfffff000000ffffffc>} imagemask } 65 /G41 MSTT31c1f0 AddChar /G31 [50.0 0.0 11.0 0.0 37.0 68.0] /G31 { 26 68 true [1 0 0 -1 -11.0 68.0] {<0001c0000007c000001fc000007fc00001ffc00007ffc0001fffc0007fffc000ffffc000407fc000 007fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000 003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000 003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000 003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000 003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000 003fc000003fc000003fc000007fe000007fe00001fff8003fffffc03fffffc0>} imagemask } 49 /G31 MSTT31c1f0 AddChar /G2e [25.0 0.0 7.0 -1.0 18.0 10.0] /G2e { 11 11 true [1 0 0 -1 -7.0 10.0] {<1f003f807fc0ffe0ffe0ffe0ffe0ffe07fc03f801f00>} imagemask } 46 /G2e MSTT31c1f0 AddChar /G33 [50.0 0.0 4.0 -1.0 41.0 68.0] /G33 { 37 69 true [1 0 0 -1 -4.0 68.0] {<0003fe0000001fffc000003ffff00000fffff80001fffffc0003fffffe0007ffffff0007f01fff00 0f8003ff801f0001ff801c0000ffc03800007fc03000003fc07000003fc02000003fc00000001fc0 0000001fc00000001f800000001f800000001f000000001f000000001e000000003e000000003c00 000000380000000070000000006000000000c0000000018000000003e00000000ff80000001ffc00 0000fffe000003ffff00001fffff8000007fffc000000fffe0000003ffe0000001fff00000007ff0 0000003ff00000001ff80000001ff80000000ff80000000ff800000007f800000007f800000007f8 00000003f800000003f800000003f800000003f000000003f000000003f000000003e000000003e0 00000007c000000007c00000000f800000000f800000001f003e00003e007f80007c00ffe001f800 fffc07f000ffffffc0007fffff00003ffff8000007ff800000>} imagemask } 51 /G33 MSTT31c1f0 AddChar /G34 [50.0 0.0 2.0 0.0 46.0 68.0] /G34 { 44 68 true [1 0 0 -1 -2.0 68.0] {<00000007e00000000007e0000000000fe0000000001fe0000000001fe0000000003fe0000000007f e0000000007fe000000000ffe000000001ffe000000001dfe0000000039fe0000000079fe0000000 071fe00000000e1fe00000001e1fe00000003c1fe0000000381fe0000000781fe0000000f01fe000 0000e01fe0000001e01fe0000003c01fe0000003801fe0000007801fe000000f001fe000000e001f e000001e001fe000003c001fe0000038001fe0000078001fe00000f0001fe00000f0001fe00001e0 001fe00003c0001fe00003c0001fe0000780001fe0000f00001fe0000f00001fe0001e00001fe000 3c00001fe0007c00001fe0007800001fe000fffffffffff0fffffffffff0fffffffffff0ffffffff fff0fffffffffff0fffffffffff0fffffffffff00000001fe0000000001fe0000000001fe0000000 001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe000 0000001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001fe0000000001f e0000000001fe000>} imagemask } 52 /G34 MSTT31c1f0 AddChar /G36 [50.0 0.0 4.0 -1.0 46.0 68.0] /G36 { 42 69 true [1 0 0 -1 -4.0 68.0] {<000000007f8000000007ff800000003ff800000000ff8000000003fc000000000ff0000000001fe0 000000007f8000000000ff0000000001fe0000000003fc0000000007f8000000000ff0000000001f e0000000003fc0000000007fc0000000007f8000000000ff0000000001ff0000000001fe00000000 03fe0000000007fc0000000007fc000000000ff8000000000ff8000000001ff0000000001ff00ff8 00001ff07fff00003fe1ffff80003fe7ffffe0003fff81fff0007ffe003ff8007ff8001ffc007fe0 000ffe007fc00007fe00ffc00007ff00ffc00003ff00ffc00003ff80ff800001ff80ff800001ff80 ff800000ff80ff800000ffc0ff800000ffc0ff800000ffc0ff8000007fc0ff8000007fc0ff800000 7fc0ff8000007fc07f8000007fc07f8000007fc07fc000007fc07fc000007f803fc000007f803fc0 00007f803fe000007f001fe000007f001fe00000fe000ff00000fe000ff00000fc0007f80001fc00 03f80001f80001fc0003f00001fe0007e00000ff000fe000007f801f8000003fe07f0000000ffffe 00000003fff8000000007fc00000>} imagemask } 54 /G36 MSTT31c1f0 AddChar %%EndResource 5 8 SJ 586 902 2139 (A revised version has been integrated in Linux 1.3.46) 2139 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1075 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 4 4 SJ 586 1045 993 (To use quotas, you need:) 993 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 623 1184 38 (\226) 38 SB %%BeginResource: font MSTT31c1fd /G31 [38.0 0.0 9.0 0.0 29.0 51.0] /G31 { 20 51 true [1 0 0 -1 -9.0 51.0] {<000c00007c0001fc0007fc001ffc007ffc00c3fc0003fc0001fc0001fc0001fc0001fc0001fc0001 fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc 0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc00 01fc0001fc0001fc0001fc0001fc0001fc0001fc0001fc0003fe0007ff007ffff0>} imagemask } 49 /G31 MSTT31c1fd AddChar /G2e [19.0 0.0 5.0 -1.0 13.0 7.0] /G2e { 8 8 true [1 0 0 -1 -5.0 7.0] {<3c7effffffff7e3c>} imagemask } 46 /G2e MSTT31c1fd AddChar /G33 [38.0 0.0 3.0 -1.0 31.0 51.0] /G33 { 28 52 true [1 0 0 -1 -3.0 51.0] {<001fc00000fff80001fffc0007fffe000fffff000f81ff801c007f8038003fc030001fc060001fc0 00000fc000000fc000000fc000000f8000000f8000000f0000000f0000001e0000001c0000003800 000070000000e0000001f8000007fe00003fff0000ffff800007ffc00001ffc000007fe000003fe0 00001fe000000ff000000ff0000007f0000007f0000003f0000003f0000003f0000003f0000003e0 000003e0000003e0000007c0000007c000000f8078000f00fe001e00ff003c00ffc0f8007fffe000 3fff80000ffc0000>} imagemask } 51 /G33 MSTT31c1fd AddChar /G34 [38.0 0.0 2.0 0.0 35.0 51.0] /G34 { 33 51 true [1 0 0 -1 -2.0 51.0] {<000007c00000000fc00000000fc00000001fc00000001fc00000003fc00000007fc00000007fc000 0000dfc0000001dfc00000019fc00000039fc00000031fc00000061fc000000e1fc000000c1fc000 001c1fc00000381fc00000301fc00000701fc00000601fc00000e01fc00001c01fc00001801fc000 03801fc00003001fc00007001fc0000e001fc0000c001fc0001c001fc00038001fc00038001fc000 70001fc00070001fc000ffffffff80ffffffff80ffffffff80ffffffff8000001fc00000001fc000 00001fc00000001fc00000001fc00000001fc00000001fc00000001fc00000001fc00000001fc000 00001fc00000001fc00000001fc000>} imagemask } 52 /G34 MSTT31c1fd AddChar /G36 [38.0 0.0 3.0 -1.0 35.0 51.0] /G36 { 32 52 true [1 0 0 -1 -3.0 51.0] {<000000fe000007f000003f000000fc000001f8000007e000000fc000001f8000003f0000007e0000 00fc000001fc000003f8000003f0000007f000000fe000000fe000001fe000001fc000003fc00000 3f81fe003f8fff807fbfffe07ff83ff07fe00ff87f8007f8ff0003fcff0001feff0001fefe0001fe fe0000fffe0000fffe0000fffe00007ffe00007ffe00007ffe00007f7e00007f7e00007f7f00007e 3f00007e3f00007e3f80007c1f8000fc0f8000f80fc001f007e001f003e003e001f007c000fc1f00 003ffe00000ff000>} imagemask } 54 /G36 MSTT31c1fd AddChar /G2b [42.0 0.0 1.0 5.0 40.0 44.0] /G2b { 39 39 true [1 0 0 -1 -1.0 44.0] {<00003800000000380000000038000000003800000000380000000038000000003800000000380000 00003800000000380000000038000000003800000000380000000038000000003800000000380000 00003800000000380000fffffffffefffffffffefffffffffe000038000000003800000000380000 00003800000000380000000038000000003800000000380000000038000000003800000000380000 0000380000000038000000003800000000380000000038000000003800000000380000>} imagemask } 43 /G2b MSTT31c1fd AddChar /G93 [33.0 0.0 2.0 32.0 30.0 51.0] /G93 { 28 19 true [1 0 0 -1 -2.0 51.0] {<00800040038001c00e0007001c000c0010001800200010006000300040002000c0006000c0006000 c0006000ef8077c0ffc07fe0ffe07ff0ffe07ff07fe03ff03fe01ff01fc00fe00f800780>} imagemask } 147 /G93 MSTT31c1fd AddChar /G94 [33.0 0.0 2.0 32.0 30.0 51.0] /G94 { 28 19 true [1 0 0 -1 -2.0 51.0] {<1e001f007f003f80ff807fc0ffc07fe0ffe07fe0ffe07ff07fe03ff03ee01f700060003000600030 006000300040002000c000600080004001800080070003800e00070038001c0020001000>} imagemask } 148 /G94 MSTT31c1fd AddChar /G51 [54.0 0.0 3.0 -14.0 51.0 51.0] /G51 { 48 65 true [1 0 0 -1 -3.0 51.0] {<00001ff800000000ffff00000003f00fe000000f8003f000003f0000fc00007c00007e0000f80000 3f0001f800001f8003f000000fc007e000000fe007e0000007f00fc0000007f01fc0000003f81fc0 000003f83f80000003fc3f80000001fc7f80000001fe7f80000001fe7f00000001fe7f00000000fe ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ffff00000000ffff000000 00ffff00000000ffff00000000ffff00000000ffff00000000ff7f00000000fe7f80000000fe7f80 000001fe7f80000001fe3f80000001fc3f80000001fc3fc0000003fc1fc0000003f81fe0000003f0 0fe0000007f007f0000007e007f000000fc003f800001fc001fc00001f8000fe00003f00007f0000 fc00001f8001f8000007f00ff0000001ffffc00000007ffe000000001ffc000000000ffe00000000 07fe0000000003ff0000000001ff8000000000ffc0000000003fc0000000001fe00000000007f000 00000001fc00000000007e00000000001f800000000003f000000000001e>} imagemask } 81 /G51 MSTT31c1fd AddChar %%EndResource 717 1184 2057 (a recent \(1.3.46+\) kernel \(answer \223y\224 to \223Quota support\224 during the ) 2057 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 2774 1187 180 (make) 180 SB 717 1277 270 (config) 270 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font -1 1 SJ 987 1274 165 ( step\)) 165 SB 623 1383 38 (\226) 38 SB -2 2 SJ 717 1383 545 (the quota utilities:) 545 SB %%BeginResource: font MSTT31c1fd /Gbb [35.0 0.0 2.0 0.0 32.0 35.0] /Gbb { 30 35 true [1 0 0 -1 -2.0 35.0] {} imagemask } 187 /Gbb MSTT31c1fd AddChar %%EndResource 773 1491 35 (\273) 35 SB %%BeginResource: font MSTT31c1fd /G4c [45.0 0.0 1.0 0.0 43.0 50.0] /G4c { 42 50 true [1 0 0 -1 -1.0 50.0] {} imagemask } 76 /G4c MSTT31c1fd AddChar /G50 [43.0 0.0 1.0 0.0 40.0 50.0] /G50 { 39 50 true [1 0 0 -1 -1.0 50.0] {} imagemask } 80 /G50 MSTT31c1fd AddChar /G45 [46.0 0.0 1.0 0.0 44.0 50.0] /G45 { 43 50 true [1 0 0 -1 -1.0 50.0] {} imagemask } 69 /G45 MSTT31c1fd AddChar /G4f [54.0 0.0 3.0 -1.0 51.0 51.0] /G4f { 48 52 true [1 0 0 -1 -3.0 51.0] {<00001ff800000000ffff80000003f00fe000000f8001f000003f0000fc00007e00007e0000fc0000 3f0001f800001f8003f000000fc007e000000fe00fe0000007f00fc0000007f01fc0000003f81fc0 000003f83f80000001fc3f80000001fc7f80000001fe7f80000001fe7f80000001fe7f00000000fe ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ffff00000000ffff000000 00ffff00000000ffff00000000ffff00000000ffff00000000ffff00000000fe7f00000000fe7f80 000000fe7f80000001fe7f80000001fc3f80000001fc3fc0000001fc1fc0000003f81fc0000003f8 0fe0000003f00fe0000007e007f0000007e003f000000fc001f800001f8000fc00003f00007e0000 7e00003f0000fc00001f8003f0000007f00fc0000001ffff000000001ff80000>} imagemask } 79 /G4f MSTT31c1fd AddChar %%EndResource 848 1491 24 (f) 25 SB 873 1491 59 (tp) 58 SB 931 1491 87 (://f) 88 SB 1019 1491 59 (tp) 58 SB 1077 1491 43 (.f) 44 SB 1121 1491 38 (u) 37 SB 1158 1491 135 (net.f) 136 SB 1294 1491 80 (i/p) 79 SB 1373 1491 76 (ub) 75 SB 1448 1491 66 (/L) 67 SB 1515 1491 59 (in) 58 SB 1573 1491 139 (ux/P) 138 SB 1711 1491 46 (E) 45 SB 1756 1491 54 (O) 55 SB 1811 1491 43 (P) 41 SB 1852 1491 45 (L) 46 SB 1898 1491 112 (E/L) 113 SB 2011 1491 21 (i) 20 SB 2031 1491 76 (nu) 75 SB 2106 1491 29 (s) 30 SB 2136 1491 21 (/) 20 SB 2156 1491 29 (s) 30 SB 2186 1491 38 (u) 37 SB 2223 1491 103 (bsy) 104 SB 2327 1491 83 (ste) 84 SB 2411 1491 57 (m) 58 SB 2469 1491 88 (s/q) 87 SB 2556 1491 76 (uo) 75 SB 2631 1491 54 (ta) 55 SB 773 1599 35 (\273) 35 SB 848 1599 24 (f) 25 SB 873 1599 59 (tp) 58 SB 931 1599 87 (://f) 88 SB 1019 1599 59 (tp) 58 SB 1077 1599 224 (.cistron) 223 SB 1300 1599 57 (.n) 56 SB 1356 1599 118 (l/pu) 117 SB 1473 1599 59 (b/) 58 SB 1531 1599 43 (P) 42 SB 1573 1599 109 (eop) 108 SB 1681 1599 54 (le) 55 SB 1736 1599 21 (/) 20 SB 1756 1599 57 (m) 59 SB 1815 1599 163 (vw/qu) 162 SB 1977 1599 92 (ota) 92 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB %%BeginResource: font MSTT31c1bc /G37 [29.0 0.0 2.0 0.0 25.0 39.0] /G37 { 23 39 true [1 0 0 -1 -2.0 39.0] {<0ffffe1ffffe1ffffe1ffffe3ffffc38001c60001c400038c0003880003800007000007000007000 00e00000e00000e00001c00001c00001c0000380000380000380000700000700000700000e00000e 00000e00001c00001c00001c0000380000380000380000700000700000700000e00000e000>} imagemask } 55 /G37 MSTT31c1bc AddChar %%EndResource 2919 2191 29 (7) 29 SB 32 0 0 167 167 0 0 0 150 /MSTT31c1c9 font -6 3 SJ 256 84 1853 (Administration of the quota) 1853 SB 256 284 149 (su) 148 SB 404 284 149 (bs) 148 SB 552 284 398 (ystem) 398 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 648 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d057ee26f8d6945ed4a734c986bacc9c4e9146c536d435a3f6fe0bdd7292c545882f15c502251ef625c374cd766ecd6c027e94c0d 02455a20a915ae7e602e4ce476c48af63ce8881e74c11919ef36f4173b1c5093a5c28b8b51817b3b2d6208d608bd4a83e1e281bccf58e2e3167313817edb8130 3e3a3ed7fd80096a1582c85560de49313e80c9450fa16756be238e37e4e1e782239b6ef0c45e4d6a4990e6b587e1f1a8a85e38db96ba259d8b88453f687fa358 5489f868f8cfb10e7ab8f3fe7b10d998cf8058e0ec33100415a1c7d9dcff19037c7b759645e8f5273270f67ab6adacb319ab 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -15 5 SJ 586 615 1756 (installing a kernel with quota support) 1756 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 817 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font -15 3 SJ 586 784 1288 (installing the quota utilities) 1288 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 985 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font -12 4 SJ 586 952 1732 (activating disk quotas on filesystems) 1732 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 1153 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d0007e93fb06c6a176f2b56dd99c207c01444802de9e7bcfa5f1fa63880cc63e67df2094a85d91cac055b75fb839d00387733a140 30015b397949b626fa6b1885d027fa05dcf0eb8fe9dc385e89a67d0f95d954dc 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -16 4 SJ 586 1120 1669 (setting disk quotas for users/groups) 1669 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 1321 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font -9 3 SJ 586 1288 1114 (checking for disk usage) 1114 SB 32 0 0 88 88 0 0 0 71 /ZapfDingbats font 473 1489 69 (u) 69 SB 32 0 0 117 117 0 0 0 104 /MSTT31c1c9 font -10 2 SJ 586 1456 1294 (checking quota consistency) 1294 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB %%BeginResource: font MSTT31c1bc /G38 [29.0 0.0 3.0 0.0 26.0 40.0] /G38 { 23 40 true [1 0 0 -1 -3.0 40.0] {<00fe0003ffc00f83e01f01f03e00f83c00783c007c7c007c7c007c7c007c7e007c7e00783f00f83f 80f03fc1e01fe3c00ff78007fe0003fc0001fe0000ff8003ffc0073fe00e0ff01e07f83c03f87c01 fc7800fcf8007ef8007ef8003ef8003ef8003e78003c7c003c3e00783f00f01f83e007ffc001fe00 >} imagemask } 56 /G38 MSTT31c1bc AddChar %%EndResource 2919 2191 29 (8) 29 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font -4 4 SJ 256 305 1789 (Installing the kernel and tools) 1789 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G4b [72.0 0.0 2.0 0.0 72.0 67.0] /G4b { 70 67 true [1 0 0 -1 -2.0 67.0] {} imagemask } 75 /G4b MSTT31c1f0 AddChar /G6a [28.0 0.0 -8.0 -21.0 18.0 70.0] /G6a { 26 91 true [1 0 0 -1 8.0 70.0] {<00003e0000007f000000ff800001ffc00001ffc00001ffc00001ffc00001ffc00000ff8000007f00 00003e00000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000001c000000fc000007fc00001ffc0000fffc0001fffc0 0018ffc000007fc000007fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc0 00003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc0 00003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc0 00003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc000003fc0 00003fc000003fc000003fc000003fc000003fc000003f8000003f8000003f8000003f8000003f00 00003f0000003f003c003e007f003e00ff807c00ff807800ffc0f000fff1e0007fffc0003fff0000 07f80000>} imagemask } 106 /G6a MSTT31c1f0 AddChar /G93 [44.0 0.0 3.0 42.0 41.0 68.0] /G93 { 38 26 true [1 0 0 -1 -3.0 68.0] {<001000002000700000e001f00003c003c00007800700000e000e00001c001c000038001800007000 3000006000700000e000600000c000600000c000e00001c000e00001c000e00001c000f3f001e7e0 fff801fff0fffc01fff8fffe01fffc7ffe00fffc7ffe00fffc7ffe00fffc3ffc007ff81ffc003ff8 0ff8001ff003e00007c0>} imagemask } 147 /G93 MSTT31c1f0 AddChar /G94 [44.0 0.0 3.0 42.0 41.0 68.0] /G94 { 38 26 true [1 0 0 -1 -3.0 68.0] {<0f80001f003fe0007fc07ff000ffe07ff800fff0fffc01fff8fffc01fff8fffc01fff8fffe01fffc 7ffe00fffc3ffe007ffc1f9e003f3c000e00001c000e00001c000e00001c000c000018000c000018 001c0000380018000030003800006000700000e000e00001c001c00003800780000f001f00003e00 1c000038001000002000>} imagemask } 148 /G94 MSTT31c1f0 AddChar /G51 [72.0 0.0 4.0 -19.0 68.0 68.0] /G51 { 64 87 true [1 0 0 -1 -4.0 68.0] {<0000001ffc000000000001ffffc0000000000ffffff8000000003fe00ffe00000000ff0001ff0000 0003fc00007fc0000007f800001fe000000ff000000ff000001fe0000007f800003fc0000003fc00 007f80000001fe0000ff00000001ff0001ff00000000ff8003fe000000007fc003fe000000007fc0 07fc000000003fe00ffc000000003ff00ff8000000003ff01ff8000000001ff81ff8000000001ff8 3ff0000000001ffc3ff0000000001ffc3ff0000000000ffc7ff0000000000ffe7ff0000000000ffe 7ff0000000000ffe7fe0000000000ffe7fe00000000007feffe00000000007ffffe00000000007ff ffe00000000007ffffe00000000007ffffe00000000007ffffe00000000007ffffe00000000007ff ffe00000000007ffffe00000000007ffffe00000000007ffffe00000000007ffffe00000000007ff ffe00000000007ff7fe00000000007fe7ff00000000007fe7ff00000000007fe7ff0000000000ffe 7ff0000000000ffc3ff0000000000ffc3ff0000000000ffc3ff8000000000ff81ff8000000001ff8 1ff8000000001ff00ffc000000001ff00ffc000000003fe007fc000000003fe007fe000000007fc0 03fe000000007f8001ff00000000ff8000ff80000000ff00007f80000001fe00007fc0000003fc00 001fe0000007f800000ff000000ff0000007f800001fe0000003fe00003f80000000ff8000ff0000 00003fe00ffc000000000ffffff00000000003ffff800000000000ffff0000000000007fff800000 0000003fff8000000000001fffc000000000000fffe0000000000007fff0000000000001fff00000 00000000fff80000000000007ffc0000000000001ffe0000000000000fff00000000000003ff8000 0000000000ffc00000000000003ff00000000000000ffc00000000000001ff000000000000003ff0 00000000000007fe000000000000003e>} imagemask } 81 /G51 MSTT31c1f0 AddChar %%EndResource 6 7 SJ 586 614 2118 (Kernel: just answer \223y\224 to \223Quota support\224, compile,) 2118 SB 1 3 SJ 586 734 971 (install the kernel, reboot) 971 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 908 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1 3 SJ 586 878 689 (Tools: just type \223) 689 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 1 2 SJ 1277 882 1080 (make; make install) 1080 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1 2 SJ 2358 878 297 (\224 but ...) 297 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1051 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G45 [61.0 0.0 2.0 0.0 59.0 67.0] /G45 { 57 67 true [1 0 0 -1 -2.0 67.0] {} imagemask } 69 /G45 MSTT31c1f0 AddChar /G32 [50.0 0.0 2.0 0.0 46.0 68.0] /G32 { 44 68 true [1 0 0 -1 -2.0 68.0] {<0000ff8000000007fff80000003ffffe0000007fffff000000ffffffc00001ffffffe00003ffffff f00007fc03fff0000fe000fff8000f80003ffc001f00001ffc001e00000ffe003c000007fe003800 0003fe0038000003ff0070000001ff0070000001ff0060000001ff0000000000ff0000000000ff00 00000000ff0000000000ff0000000000fe0000000000fe0000000000fe0000000000fe0000000000 fc0000000001fc0000000001f80000000001f80000000003f00000000003f00000000003e0000000 0007c00000000007c0000000000f80000000001f00000000001f00000000003e00000000003c0000 000000780000000000f00000000001f00000000001e00000000003c0000000000780000000000f00 000000001e00000000003c0000000000780000000000f00000000001e00000000003c00000000007 80000000000700000000000e00000000003c0000007000780000006000f0000000e001e0000003e0 03c000001fc007ffffffffc00fffffffff801fffffffff803fffffffff807fffffffff00ffffffff ff00ffffffffff00>} imagemask } 50 /G32 MSTT31c1f0 AddChar %%EndResource 6 8 SJ 586 1021 2024 (... you may want to include special Ext2fs support:) 2024 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 623 1163 45 (\226) 45 SB 717 1163 450 (quotacheck) 450 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font %%BeginResource: font MSTT31c1fd /G32 [38.0 0.0 2.0 0.0 35.0 51.0] /G32 { 33 51 true [1 0 0 -1 -2.0 51.0] {<001ff00000007ffc000001ffff000003ffff800007ffffc0000fffffe0001fc0fff0001f003ff800 3c000ff800380007f800300007fc00700003fc00600003fc00600001fc00000001fc00000001fc00 000001fc00000001f800000001f800000001f800000001f000000003f000000003e000000003e000 000007c000000007c00000000f800000000f000000001e000000003e000000003c00000000780000 0000f000000001e000000001c0000000038000000007000000000e000000001c0000000038000000 007000000000e000008001c000010003800003000700000f000ffffffe001ffffffe003ffffffe00 7ffffffc00fffffffc00fffffffc00>} imagemask } 50 /G32 MSTT31c1fd AddChar /G92 [25.0 0.0 7.0 32.0 18.0 51.0] /G92 { 11 19 true [1 0 0 -1 -7.0 51.0] {<3e007f00ff80ffc0ffe0ffe07fe03ee0006000600040004000c00180030006001c0038002000>} imagemask } 146 /G92 MSTT31c1fd AddChar %%EndResource 1 8 SJ 1167 1160 1478 ( uses the Ext2fs library written by Theodore Ts\222o) 1478 SB 623 1268 38 (\226) 38 SB 717 1268 921 (This is much faster than using ) 921 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 1638 1271 405 (readdir\(\)) 405 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1412 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 586 1382 1036 (To enable Ext2fs support:) 1036 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 623 1521 38 (\226) 38 SB 717 1521 128 (add ) 128 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 845 1524 630 (-DEXT2_DIRECT ) 630 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 1475 1521 78 (to ) 78 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 1553 1524 270 (CFLAGS) 270 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 623 1629 38 (\226) 38 SB 717 1629 128 (add ) 128 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 845 1632 405 (-lext2fs ) 405 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 1250 1629 78 (to ) 78 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 1328 1632 315 (LDFLAGS) 315 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2919 2191 29 (9) 29 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d06220d6e2b623024556ea2a939cb367d2285f7b04631175ab33f2e59099e861b3f875c7fac9020d1ef6efbe9487d5c5b60b1182e 1d16965caac24d6041f6f39b7cd58549c9d14c1662f11e111e33b800e8ce1d96a9f15bc4ce0b7da824583f92dceeb4d299415c584f549bd2e98ffd8078fa1235 c39cf7fa50fd5046a9ff05ab034b9277a9a7eec0341469664499fc5d03bb261786df4623ec9dbd2dfe7a56b7b2d3476013d5286fd827fa31f4b64ef3cbde3e63 d1c8da84fbe462d36d55b82375491a6e16e964229cce8719aa830a4ea277345799016cd9bcca9a6daf9cb9ec5b10300d750aaea0d792e6d6d33efb3ef209261f 698d71fcb0172c34c6737c 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -5 5 SJ 256 305 2204 (Enabling disk quotas on file systems) 2204 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 7 7 SJ 586 614 1690 (Quotas are managed on a file system basis) 1690 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 788 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 586 758 1369 (Two fstab options control quotas: ) 1369 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 1955 762 480 (usrquota) 480 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 2435 758 169 ( and) 169 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 882 480 (grpquota) 480 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1051 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 586 1021 883 (Example of /etc/fstab:) 883 SB 32 0 0 67 67 0 0 0 57 /Courier-Bold /font9 ANSIFont font 586 1145 2280 (/dev/hda2 / ext2 defaults,rw 0 1) 2280 SB 586 1225 2280 (/dev/hdb2 /home ext2 defaults,rw,usrquota,grpquota 0 2) 2280 SB 586 1305 2280 (/dev/sda1 /usr/src ext2 default,usrquota 0 2) 2280 SB 586 1385 2280 (none /proc proc defaults,rw 0 0) 2280 SB 586 1465 2280 (/dev/hda3 none swap sw 0 0) 2280 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1596 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 586 1566 1042 (Quotas are activated with ) 1042 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 1628 1570 420 (quotaon) 420 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 2048 1566 28 (:) 28 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1690 1380 (/usr/sbin/quotaon -avug) 1380 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB %%BeginResource: font MSTT31c1bc /G30 [29.0 0.0 2.0 0.0 26.0 40.0] /G30 { 24 40 true [1 0 0 -1 -2.0 40.0] {<007e0000ff8003c3c00780e00f00f00e00701e00781e003c3c003c3c003c7c003e7c001e7c001e78 001ef8001ff8001ff8001ff8001ff8001ff8001ff8001ff8001ff8001ff8001ff8001ff8001f7800 1e78001e7c003e7c003e3c003c3c003c3e00381e00780e00700f00f00781e003c3c001ff00007c00 >} imagemask } 48 /G30 MSTT31c1bc AddChar %%EndResource 2890 2191 58 (10) 58 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font %%BeginResource: font MSTT31c1c9 currentfile eexec 9e67edc6b858a3e762244b628fb7f6f6b82db3d80533f85f9af7ec02fa0992f446e47e7476690365d15488a3d0557140c554c35b60083b9bf344ec199d995ff7 cd974526686a837538b7a59d07d53e21b3fa3313fbd1f7f7696e463c6e9f4dd81a178f4cd84a9c664c8ed3ec336fd6fb9e483f3302eeb5fe4637dfe6d10e7ba4 f53e92bb2bbdcd0a388c0136f8906ca645dc0a64a817eca590cd187ecf50e06f833cc7154aaca53c69bc3b1326502d3bbeefe3c6ca245a19007872ec8da89685 56eb3a6dfbb3acb8151d12382ee5a80c2afd576ac183cde8d7eab3e403805ee0e68a511f2d65ee2ed6124ccd69dfee6b3e8ceb1b0708a1183f6fb7e85a1f2038 dbdf9ef86f77652226e8a4109784e077e9d3a78d5c34c01f0b4d377941e119ddace546b11dd90abf5f228925ffb99beaf6fd83aed87d08f3849c79e7acd19a06 2022d0a0c0082055a16412d5e30b81adcb81bf0742acf8c198c2266ef5e1cf7b86096cc517bb37e3a9dc8d3733b4135c34ed46f4d1bc36446ef1bc30ed48e948 a8612262f068a2e3119be1286861e7a0e5 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource -4 2 SJ 256 305 1504 (Setting individual quotas) 1504 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G49 [31.0 0.0 2.0 0.0 29.0 67.0] /G49 { 27 67 true [1 0 0 -1 -2.0 67.0] {} imagemask } 73 /G49 MSTT31c1f0 AddChar %%EndResource 2 8 SJ 586 614 1680 (Individual disk quotas can be set with the ) 1680 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 2268 618 420 (edquota) 420 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 2688 614 181 ( tool) 181 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 788 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 6 9 SJ 586 758 2274 (The administrator can specify the soft and hard limits for) 2274 SB 1 1 SJ 586 878 263 (users \() 263 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 849 882 120 (-u) 120 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 2 3 SJ 969 878 556 (\) and groups \() 556 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 1527 882 120 (-g) 120 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1647 878 33 (\)) 33 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1051 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 586 1021 414 (Example \() 414 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 1000 1025 1080 (edquota -u dugenou) 1080 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 2080 1021 61 (\):) 61 SB 32 0 0 58 58 0 0 0 50 /Courier-Bold /font9 ANSIFont font 586 1144 840 (Quotas for user dugenou:) 840 SB 586 1214 2240 (/dev/hdb2: blocks in use: 16, limits \(soft = 5000, hard = 6000\) ) 2240 SB 773 1283 1960 ( inodes in use: 11, limits \(soft = 100, hard = 110\)) 1960 SB 586 1353 1995 (/dev/sda1: blocks in use: 0, limits \(soft = 0, hard = 0\) ) 1995 SB 773 1423 1785 ( inodes in use: 0, limits \(soft = 0, hard = 0\)) 1785 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1544 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 6 10 SJ 586 1514 2265 (edquota can also copy disk quotas from a user to another) 2265 SB 586 1634 172 (one:) 172 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1758 1800 (edquota -p prototype_user user) 1800 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2890 2191 58 (11) 58 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font -2 2 SJ 256 305 1244 (Checking disk usage) 1244 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1 1 SJ 586 614 180 (The ) 180 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 766 618 480 (repquota) 480 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 3 6 SJ 1246 614 1435 ( command prints a summary of disk) 1435 SB 586 734 254 (usage:) 254 SB 32 0 0 58 58 0 0 0 50 /Courier-Bold /font9 ANSIFont font 773 894 1645 (*** Report for user quotas on /dev/hdb2 \(/home\)) 1645 SB 1073 976 1505 ( Block limits File limits) 1505 SB 586 1046 2345 (User used soft hard grace used soft hard grace) 2345 SB 586 1116 2065 (root -- 19 0 0 2 0 0) 2065 SB 586 1185 2065 (bin -- 3 0 0 3 0 0) 2065 SB 586 1255 2065 (news -- 31691 0 0 11846 0 0) 2065 SB 586 1325 2065 (card -- 111498 0 0 8673 0 0) 2065 SB 586 1395 2065 (dugenou -- 16 5000 6000 11 100 110) 2065 SB 586 1465 2065 (melanie -- 6 5000 6000 7 100 110) 2065 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1586 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 3 9 SJ 586 1556 1961 (The quota command can also be used to print the) 1961 SB 586 1676 2013 (individual quota associated with a user or a group:) 2013 SB 32 0 0 58 58 0 0 0 50 /Courier-Bold /font9 ANSIFont font 586 1798 2030 (Disk quotas for user dugenou \(uid 1004\): ) 2030 SB 773 1868 2170 (Filesystem blocks quota limit grace files quota limit grace) 2170 SB 773 1938 1855 (/dev/hdb2 16 5000 6000 11 100 110) 1855 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2890 2191 58 (12) 58 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font -6 2 SJ 256 305 1690 (Checking quota consistency) 1690 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 9 9 SJ 586 614 2243 (Disk quota descriptors are kept in memory by the kernel) 2243 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 788 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 9 7 SJ 586 758 1810 (They are periodically written back to the disk) 1810 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 932 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 9 7 SJ 586 902 2182 (They can become corrupted after an unclean shutdown) 2182 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1075 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1049 600 (quotacheck) 600 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 4 6 SJ 1186 1045 1545 ( checks the consistency of disk quotas:) 1545 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1169 1560 (/usr/sbin/quotacheck -avug) 1560 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1339 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 586 1309 2266 (Be sure to compile the quota tools with Ext2fs support if) 2266 SB %%BeginResource: font MSTT31c1f0 /G21 [33.0 0.0 11.0 -1.0 22.0 68.0] /G21 { 11 69 true [1 0 0 -1 -11.0 68.0] {<1f003f807fc07fc0ffe0ffe0ffe0ffe0ffe0ffe0ffe0ffe0ffe07fc07fc07fc07fc07fc07fc07fc0 7fc07f807f807f803f803f803f803f803f803f003f003f003f003f001f001f001f001f001e001e00 1e001e001e001e001e000e000c000c000c000c00000000000000000000000000000000001f003f80 7fc0ffe0ffe0ffe0ffe0ffe07fc03f801f00>} imagemask } 33 /G21 MSTT31c1f0 AddChar %%EndResource 4 5 SJ 586 1429 910 (you want it to run fast!) 910 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2890 2191 58 (13) 58 SB 32 0 0 167 167 0 0 0 150 /MSTT31c1c9 font -3 1 SJ 256 284 721 (Quota API) 721 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 5 8 SJ 586 614 1850 (A system call can be used to manipulate quota) 1850 SB 32 0 0 63 63 0 0 0 50 /ZapfDingbats font 473 779 50 (u) 50 SB 32 0 0 83 83 0 0 0 71 /Courier-Bold /font9 ANSIFont font 586 758 2250 (int quotactl \(int cmd, char *special, int id,) 2250 SB 586 858 650 (caddr_t addr\)) 650 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1008 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G43 [67.0 0.0 4.0 -1.0 63.0 68.0] /G43 { 59 69 true [1 0 0 -1 -4.0 68.0] {<0000001ffc000600000001ffffc00e0000000ffffff80e0000003ff803fe1e000000ffc0007ffe00 0001ff00000ffe000007fc000007ff00000ff8000003ff00001fe0000001ff00003fc0000000ff00 007fc00000007f0000ff800000003f0001ff000000001f0001ff000000001f0003fe000000000f00 07fe000000000f0007fc0000000007000ffc0000000007800ff80000000003801ff8000000000380 1ff80000000003803ff80000000001803ff00000000001803ff00000000000007ff0000000000000 7ff00000000000007ff00000000000007fe00000000000007fe0000000000000ffe0000000000000 ffe0000000000000ffe0000000000000ffe0000000000000ffe0000000000000ffe0000000000000 ffe0000000000000ffe0000000000000ffe0000000000000ffe0000000000000ffe0000000000000 ffe0000000000000ffe00000000000007fe00000000000007ff00000000000007ff0000000000000 7ff00000000000003ff00000000000003ff80000000000003ff80000000000001ff8000000000000 1ffc0000000000001ffc0000000000000ffc00000000004007fe0000000000e007ff0000000000c0 03ff00000000018003ff80000000038001ffc0000000070000ffe00000000e00007ff00000001c00 003ff80000003800001ffe000000f000000fff000003e0000007ffe0000fc0000001fffc007f8000 00007ffffffe000000001ffffff80000000003ffffc000000000003ffc000000>} imagemask } 67 /G43 MSTT31c1f0 AddChar %%EndResource 586 978 509 (Commands: ) 509 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 1095 982 1260 (QCMD\(operation, type\)) 1260 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1152 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G4f [72.0 0.0 4.0 -1.0 68.0 68.0] /G4f { 64 69 true [1 0 0 -1 -4.0 68.0] {<0000001ffc000000000001ffffc0000000000ffffff8000000003fe00ffe00000000ff0000ff0000 0001fc00003fc0000007f800001fe000000ff000000ff000001fe0000007f800003fc0000003fc00 007f80000001fe0000ff00000000ff0001ff00000000ff8003fe000000007fc003fe000000007fc0 07fc000000003fe00ffc000000003ff00ff8000000003ff01ff8000000001ff81ff8000000001ff8 3ff8000000001ffc3ff0000000000ffc3ff0000000000ffc7ff0000000000ffe7ff0000000000ffe 7ff0000000000ffe7fe0000000000ffe7fe00000000007feffe00000000007ffffe00000000007ff ffe00000000007ffffe00000000007ffffe00000000007ffffe00000000007ffffe00000000007ff ffe00000000007ffffe00000000007ffffe00000000007ffffe00000000007ffffe00000000007ff ffe00000000007ff7fe00000000007fe7ff00000000007fe7ff00000000007fe7ff0000000000ffe 7ff0000000000ffc3ff0000000000ffc3ff0000000000ffc3ff8000000000ff81ff8000000001ff8 1ff8000000001ff80ffc000000001ff00ffc000000003fe007fc000000003fe007fe000000003fc0 03fe000000007fc001ff00000000ff8000ff80000000ff0000ff80000001fe00007fc0000003fc00 003fe0000007f800001ff000000ff0000007f800001fe0000003fe00007fc0000000ff0001ff0000 00007fe00ffc000000001ffffff00000000003ffffc000000000003ff8000000>} imagemask } 79 /G4f MSTT31c1f0 AddChar %%EndResource 586 1122 466 (Operations:) 466 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 623 1263 45 (\226) 45 SB 717 1263 405 (Q_QUOTAON) 405 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 1122 1260 38 (, ) 38 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 1160 1263 450 (Q_QUOTAOFF) 450 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 1610 1260 1128 (: activate or deactivate quota on a file) 1128 SB 717 1350 205 (system) 205 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 623 1462 45 (\226) 45 SB 717 1462 450 (Q_GETQUOTA) 450 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 1167 1459 38 (, ) 38 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 1205 1462 450 (Q_SETQUOTA) 450 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 1655 1459 821 (: get or set usage and limits) 821 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 623 1570 45 (\226) 45 SB 717 1570 360 (Q_SETLIM) 360 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 1077 1567 38 (, ) 38 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 1115 1570 360 (Q_SETUSE) 360 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 1475 1567 629 (: set limits and usage) 629 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 623 1678 45 (\226) 45 SB 717 1678 270 (Q_SYNC) 270 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 987 1675 791 (: write quotas back to disk) 791 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 623 1787 45 (\226) 45 SB 717 1787 450 (Q_GETSTATS) 450 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 1167 1784 408 (: get statistics) 408 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2890 2191 58 (14) 58 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font 256 305 589 (Structure ) 589 SB 32 0 0 150 150 0 0 0 128 /Courier-Bold /font9 ANSIFont font 845 311 450 (dqblk) 450 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 618 840 (dqb_bhardlimit) 840 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1426 614 856 (: hard limit on blocks) 856 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 788 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 762 840 (dqb_bsoftlimit) 840 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1426 758 829 (: soft limit on blocks) 829 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 932 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 906 780 (dqb_curblocks) 780 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 3 3 SJ 1366 902 872 (: current blocks usage) 872 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1075 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1049 840 (dqb_ihardlimit) 840 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1426 1045 856 (: hard limit on inodes) 856 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1219 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1193 840 (dqb_isoftlimit) 840 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1426 1189 829 (: soft limit on inodes) 829 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1363 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1337 780 (dqb_curinodes) 780 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 3 3 SJ 1366 1333 872 (: current inodes usage) 872 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1507 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1481 540 (dqb_btime) 540 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 3 7 SJ 1126 1477 1794 (: grace period associated with the block limit) 1794 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1650 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1624 540 (dqb_inode) 540 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 3 7 SJ 1126 1620 1794 (: grace period associated with the inode limit) 1794 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2890 2191 58 (15) 58 SB 32 0 0 167 167 0 0 0 150 /MSTT31c1c9 font -6 3 SJ 256 284 2038 (Implementation of disk quotas) 2038 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 586 614 1495 (Disk quotas are stored in quota files \() 1495 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 2081 618 600 (quota.user) 600 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 2681 614 169 ( and) 169 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 738 660 (quota.group) 660 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 5 7 SJ 1246 734 1430 (\) located in the root directory of file) 1430 SB 586 854 314 (systems) 314 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1028 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 586 998 1897 (Each quota file is seen as an array of structures ) 1897 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 2483 1002 360 (struct) 360 SB 586 1121 300 (dqblk) 300 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 4 7 SJ 886 1117 1685 (, that describe the current usage and limits) 1685 SB 3 4 SJ 586 1237 1247 (associated with users or groups) 1247 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1411 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 6 14 SJ 586 1381 2271 (The user id or group id is used as an index in the array to) 2271 SB 4 4 SJ 586 1501 1551 (access the appropriate quota descriptor) 1551 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2890 2191 58 (16) 58 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font -2 1 SJ 256 305 1064 (Quota descriptors) 1064 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 5 9 SJ 586 614 2336 (The kernel maintains a list of quota descriptors in memory) 2336 SB 586 734 33 (\() 33 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 619 738 720 (struct dquot) 720 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1339 734 33 (\)) 33 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 908 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1 6 SJ 586 878 1598 (The descriptors are stored in linked lists) 1598 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1051 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 4 5 SJ 586 1021 1765 (Inodes contain pointers on quota descriptors) 1765 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1195 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 6 7 SJ 586 1165 2341 (Quota operations are associated with mounted file systems) 2341 SB 586 1285 33 (\() 33 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 619 1289 1020 (struct superblock) 1020 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 1639 1285 33 (\)) 33 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2890 2191 58 (17) 58 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font -2 1 SJ 256 305 1031 (Quota operations) 1031 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 618 600 (initialize) 600 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 2 6 SJ 1186 614 1681 (: loads quota descriptors associated with a) 1681 SB 586 734 222 (inode) 222 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 908 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 882 240 (drop) 240 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 4 7 SJ 826 878 1910 (: frees quota descriptors associated with a inode) 1910 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1051 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1025 660 (alloc_block) 660 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 3 6 SJ 1246 1021 1630 (: checks for block allocation and updates) 1630 SB 586 1141 226 (usage) 226 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1315 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1289 660 (alloc_inode) 660 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 3 6 SJ 1246 1285 1630 (: checks for inode allocation and updates) 1630 SB 586 1405 226 (usage) 226 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1579 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1553 600 (free_block) 600 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 4 7 SJ 1186 1549 1737 (: updates usage when a block is deallocated) 1737 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1722 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1696 600 (free_inode) 600 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 3 6 SJ 1186 1692 1308 (: updates usage when an inode is) 1308 SB 586 1812 454 (deallocated) 454 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1986 59 (u) 59 SB 32 0 0 100 100 0 0 0 86 /Courier-Bold /font9 ANSIFont font 586 1960 480 (transfer) 480 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 6 8 SJ 1066 1956 1838 (: updates usages when a file owner is changed) 1838 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2890 2191 58 (18) 58 SB 32 0 0 150 150 0 0 0 134 /MSTT31c1c9 font -6 3 SJ 256 305 1727 (Quota support in filesystems) 1727 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G4d [89.0 0.0 2.0 0.0 87.0 67.0] /G4d { 85 67 true [1 0 0 -1 -2.0 67.0] {} imagemask } 77 /G4d MSTT31c1f0 AddChar %%EndResource 586 614 2116 (Most of the quota implementation is contained in the) 2116 SB %%BeginResource: font MSTT31c1f0 /G56 [72.0 0.0 1.0 -1.0 69.0 67.0] /G56 { 68 68 true [1 0 0 -1 -1.0 67.0] {} imagemask } 86 /G56 MSTT31c1f0 AddChar /G46 [55.0 0.0 2.0 0.0 51.0 67.0] /G46 { 49 67 true [1 0 0 -1 -2.0 67.0] {} imagemask } 70 /G46 MSTT31c1f0 AddChar %%EndResource 4 3 SJ 586 734 1082 (Virtual File System \(VFS\):) 1082 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 623 873 38 (\226) 38 SB 717 873 997 (management of quota descriptors) 997 SB 623 981 38 (\226) 38 SB -3 1 SJ 717 981 501 (quota operations) 501 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1124 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 8 7 SJ 586 1094 1845 (The file systems need a very minimal support:) 1845 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 623 1233 38 (\226) 38 SB 717 1233 1193 (when a block or inode is allocated, call ) 1193 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 1910 1236 540 (alloc_block ) 540 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 2450 1233 63 (or) 63 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 717 1326 495 (alloc_inode) 495 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 623 1431 38 (\226) 38 SB 717 1431 1264 (when a block or inode is deallocated, call ) 1264 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 1981 1434 495 (free_block ) 495 SB 32 0 0 75 75 0 0 1 67 /MSTT31c1fd font 2476 1431 63 (or) 63 SB 32 0 0 75 75 0 0 0 64 /Courier-Bold /font9 ANSIFont font 717 1525 450 (free_inode) 450 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1665 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 6 7 SJ 586 1635 2005 (Currently, this support is integrated in Ext2fs only) 2005 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1809 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 6 9 SJ 586 1779 1913 (But it would be easy to integrate quotas in other) 1913 SB 586 1899 447 (filesystems) 447 SB EJ RS %%PageTrailer SS 0 0 18 13 783 1169 300 SM 255 255 255 fC /fm 256 def 3250 2250 88 49 B 1 F n 1 lc 1 lj 0 0 0 pC 6 17 SP gs 2857 2349 88 0 CB -2765 499 M 8559 0 1 PP S n gr 32 0 0 58 58 0 0 1 53 /MSTT31c1bc font 0 0 0 fC 25 8 SJ 153 2191 1278 (Third International Linux Conference - Berlin - May 96) 1278 SB 2890 2191 58 (19) 58 SB 32 0 0 167 167 0 0 0 150 /MSTT31c1c9 font 256 284 177 (Su) 176 SB 432 284 129 (m) 130 SB 562 284 343 (mary) 342 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 644 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 8 8 SJ 586 614 2122 (Finally, the quota patches have been integrated in the) 2122 SB 2 1 SJ 586 734 645 (standard kernel!) 645 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 908 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G30 [50.0 0.0 4.0 -1.0 46.0 68.0] /G30 { 42 69 true [1 0 0 -1 -4.0 68.0] {<00003f8000000001ffe000000007fff80000000fe0fc0000001f803f0000003f001f8000007e000f c00000fc000fc00001f80007e00003f80007f00003f00003f00007f00003f80007f00001fc000fe0 0001fc000fe00001fc001fe00001fe001fe00000fe001fe00000ff003fc00000ff003fc00000ff00 3fc00000ff007fc00000ff807fc000007f807fc000007f807fc000007f807fc000007f807f800000 7fc0ff8000007fc0ff8000007fc0ff8000007fc0ff8000007fc0ff8000007fc0ff8000007fc0ff80 00007fc0ff8000007fc0ff8000007fc0ff8000007fc0ff8000007fc0ff8000007fc0ff8000007fc0 ff8000007fc0ff8000007fc0ff8000007f807f8000007f807f8000007f807f800000ff807fc00000 ff807fc00000ff803fc00000ff003fc00000ff003fc00000ff003fc00000ff001fe00001fe001fe0 0001fe000fe00001fc000fe00001fc0007f00003f80007f00003f80003f00003f00003f80007f000 01f80007e00000fc000fc00000fc001fc000007e003f8000003f007e0000001fc1fc00000007fff8 00000003ffe0000000007f000000>} imagemask } 48 /G30 MSTT31c1f0 AddChar %%EndResource 5 9 SJ 586 878 1928 (They will be part of the next stable version \(2.0\)) 1928 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1051 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font %%BeginResource: font MSTT31c1f0 /G50 [56.0 0.0 2.0 0.0 52.0 67.0] /G50 { 50 67 true [1 0 0 -1 -2.0 67.0] {} imagemask } 80 /G50 MSTT31c1f0 AddChar /G2a [50.0 0.0 7.0 29.0 41.0 70.0] /G2a { 34 41 true [1 0 0 -1 -7.0 70.0] {<0000e000000003f000000003f000000003f800000007f800000007f800000007f800000003f80000 0003f000003c03f00f007e03f01f80ff81f03fc0ffc1e07fc0ffc1e0ffc07fe1e1ffc07ff0e3ff80 1ff8c7fe0007fccff800007eff80000007f800000001e00000000ff80000007edf800007fccff800 1ff8c7ff007ff0c3ff807fe1e1ff80ffc1e0ffc0ff81e07fc0ff03f03fc07e03f01f803c03f00f00 0003f000000003f800000007f800000007f800000007f800000007f800000003f000000003f00000 0000e00000>} imagemask } 42 /G2a MSTT31c1f0 AddChar %%EndResource 3 9 SJ 586 1021 2321 (The API and tools are compatible with *BSD \(the utilities) 2321 SB 2 2 SJ 586 1141 812 (come from 4.4BSD\)) 812 SB 32 0 0 75 75 0 0 0 60 /ZapfDingbats font 473 1315 59 (u) 59 SB 32 0 0 100 100 0 0 1 90 /MSTT31c1f0 font 7 10 SJ 586 1285 2232 (Most of the quota management is done in the VFS layer) 2232 SB EJ RS %%PageTrailer %%Trailer SVDoc restore end % TrueType font name key: % MSTT31c1bc = 0c27DTimes New RomanF0000003a000001900000 % MSTT31c1c9 = 0c27DTimes New RomanF00000000000001900000 % MSTT31c1d6 = 0c27DTimes New RomanF000000000000019000ff % MSTT31c1e3 = 0c27DMonotype SortsF00000058000001900000 % MSTT31c1f0 = 0c27DTimes New RomanF00000064000001900000 % MSTT31c1fd = 0c27DTimes New RomanF0000004b000001900000 % MSTT31c20a = 0c27DMonotype SortsF0000004b000001900000 % MSTT31c217 = 0c27DTimes New RomanF00000043000001900000 % MSTT31c22e = 0c27DMonotype SortsF0000003f000001900000 %%DocumentSuppliedResources: procset Win35Dict 3 1 %%+ font MSTT31c1bc %%+ font MSTT31c1c9 %%+ font MSTT31c1d6 %%+ font MSTT31c1f0 %%+ font MSTT31c1fd %%DocumentNeededResources: font Courier-Bold %%+ font ZapfDingbats %%EOF grestore quota-4.03/doc/quotas.preformated0000644000175000001440000003223612124521007014021 00000000000000 DDiisscc QQuuoottaass iinn aa UUNNIIXX** EEnnvviirroonnmmeenntt _R_o_b_e_r_t _E_l_z Department of Computer Science University of Melbourne, Parkville, Victoria, Australia. _A_B_S_T_R_A_C_T In most computing environments, disc space is not infinite. The disc quota system provides a mechanism to control usage of disc space, on an individual basis. Quotas may be set for each individual user, on any, or all filesystems. The quota system will warn users when they exceed their allotted limit, but allow some extra space for current work. Repeatedly remaining over quota at logout, will cause a fatal over quota condition eventually. The quota system is an optional part of VMU- NIX that may be included when the system is con- figured. 11.. UUsseerrss'' vviieeww ooff ddiisscc qquuoottaass To most users, disc quotas will either be of no con- cern, or a fact of life that cannot be avoided. The _q_u_o_t_a(1) command will provide information on any disc quotas that may have been imposed upon a user. There are two individual possible quotas that may be imposed, usually if one is, both will be. A limit can be set on the amount of space a user can occupy, and there may be a limit on the number of files (inodes) he can own. _Q_u_o_t_a provides information on the quotas that have been set by the system administrators, in each of these areas, and current usage. ----------- * UNIX is a trademark of Bell Laboratories. SMM:4-2 Disc Quotas in a UNIX Environment There are four numbers for each limit, the current usage, soft limit (quota), hard limit, and number of remain- ing login warnings. The soft limit is the number of 1K blocks (or files) that the user is expected to remain below. Each time the user's usage goes past this limit, he will be warned. The hard limit cannot be exceeded. If a user's usage reaches this number, further requests for space (or attempts to create a file) will fail with an EDQUOT error, and the first time this occurs, a message will be written to the user's terminal. Only one message will be output, until space occupied is reduced below the limit, and reaches it again, in order to avoid continual noise from those programs that ignore write errors. Whenever a user logs in with a usage greater than his soft limit, he will be warned, and his login warning count decremented. When he logs in under quota, the counter is reset to its maximum value (which is a system configuration parameter, that is typically 3). If the warning count should ever reach zero (caused by three successive logins over quota), the particular limit that has been exceeded will be treated as if the hard limit has been reached, and no more resources will be allocated to the user. The oonnllyy way to reset this condition is to reduce usage below quota, then log in again. 11..11.. SSuurrvviivviinngg wwhheenn qquuoottaa lliimmiitt iiss rreeaacchheedd In most cases, the only way to recover from over quota conditions, is to abort whatever activity was in progress on the filesystem that has reached its limit, remove sufficient files to bring the limit back below quota, and retry the failed program. However, if you are in the editor and a write fails because of an over quota situation, that is not a suitable course of action, as it is most likely that initially attempting to write the file will have truncated its previ- ous contents, so should the editor be aborted without cor- rectly writing the file not only will the recent changes be lost, but possibly much, or even all, of the data that pre- viously existed. There are several possible safe exits for a user caught in this situation. He may use the editor !! shell escape command to examine his file space, and remove surplus files. Alternatively, using _c_s_h, he may suspend the editor, remove some files, then resume it. A third possibility, is to write the file to some other filesystem (perhaps to a file on /tmp) where the user's quota has not been exceeded. Then after rectifying the quota situation, the file can be moved back to the filesystem it belongs on. Disc Quotas in a UNIX Environment SMM:4-3 22.. AAddmmiinniisstteerriinngg tthhee qquuoottaa ssyysstteemm To set up and establish the disc quota system, there are several steps necessary to be performed by the system administrator. First, the system must be configured to include the disc quota sub-system. This is done by including the line: options QUOTA in the system configuration file, then running _c_o_n_f_i_g(8) followed by a system configuration*. Second, a decision as to what filesystems need to have quotas applied needs to be made. Usually, only filesystems that house users' home directories, or other user files, will need to be subjected to the quota system, though it may also prove useful to also include //uussrr. If possible, //ttmmpp should usually be free of quotas. Having decided on which filesystems quotas need to be set upon, the administrator should then allocate the avail- able space amongst the competing needs. How this should be done is (way) beyond the scope of this document. Then, the _e_d_q_u_o_t_a(8) command can be used to actually set the limits desired upon each user. Where a number of users are to be given the same quotas (a common occurrence) the --pp switch to edquota will allow this to be easily accom- plished. Once the quotas are set, ready to operate, the system must be informed to enforce quotas on the desired filesys- tems. This is accomplished with the _q_u_o_t_a_o_n(8) command. _Q_u_o_t_a_o_n will either enable quotas for a particular filesys- tem, or with the --aa switch, will enable quotas for each filesystem indicated in //eettcc//ffssttaabb as using quotas. See _f_s_t_a_b(5) for details. Most sites using the quota system, will include the line /etc/quotaon -a in //eettcc//rrcc..llooccaall. Should quotas need to be disabled, the _q_u_o_t_a_o_f_f(8) com- mand will do that, however, should the filesystem be about to be dismounted, the _u_m_o_u_n_t(8) command will disable quotas immediately before the filesystem is unmounted. This is actually an effect of the _u_m_o_u_n_t(2) system call, and it guarantees that the quota system will not be disabled if the ----------- * See also the document ``Building 4.2BSD UNIX Systems with Config''. SMM:4-4 Disc Quotas in a UNIX Environment umount would fail because the filesystem is not idle. Periodically (certainly after each reboot, and when quotas are first enabled for a filesystem), the records retained in the quota file should be checked for consistency with the actual number of blocks and files allocated to the user. The _q_u_o_t_a_c_h_e_c_k(8) command can be used to accomplish this. It is not necessary to dismount the filesystem, or disable the quota system to run this command, though on active filesystems inaccurate results may occur. This does no real harm in most cases, another run of _q_u_o_t_a_c_h_e_c_k when the filesystem is idle will certainly correct any inaccu- racy. The super-user may use the _q_u_o_t_a(1) command to examine the usage and quotas of any user, and the _r_e_p_q_u_o_t_a(8) com- mand may be used to check the usages and limits for all users on a filesystem. 33.. SSoommee iimmpplleemmeennttaattiioonn ddeettaaiill.. Disc quota usage and information is stored in a file on the filesystem that the quotas are to be applied to. Con- ventionally, this file is qquuoottaass in the root of the filesys- tem. While this name is not known to the system in any way, several of the user level utilities "know" it, and choosing any other name would not be wise. The data in the file comprises an array of structures, indexed by uid, one structure for each user on the system (whether the user has a quota on this filesystem or not). If the uid space is sparse, then the file may have holes in it, which would be lost by copying, so it is best to avoid this. The system is informed of the existence of the quota file by the _s_e_t_q_u_o_t_a(2) system call. It then reads the quota entries for each user currently active, then for any files open owned by users who are not currently active. Each subsequent open of a file on the filesystem, will be accompanied by a pairing with its quota information. In most cases this information will be retained in core, either because the user who owns the file is running some process, because other files are open owned by the same user, or because some file (perhaps this one) was recently accessed. In memory, the quota information is kept hashed by user-id and filesystem, and retained in an LRU chain so recently released data can be easily reclaimed. Information about those users whose last process has recently terminated is also retained in this way. Each time a block is accessed or released, and each time an inode is allocated or freed, the quota system gets told about it, and in the case of allocations, gets the Disc Quotas in a UNIX Environment SMM:4-5 opportunity to object. Measurements have shown that the quota code uses a very small percentage of the system cpu time consumed in writing a new block to disc. 44.. AAcckknnoowwlleeddggmmeennttss The current disc quota system is loosely based upon a very early scheme implemented at the University of New South Wales, and Sydney University in the mid 70's. That system implemented a single combined limit for both files and blocks on all filesystems. A later system was implemented at the University of Melbourne by the author, but was not kept highly accurately, eg: chown's (etc) did not affect quotas, nor did i/o to a file other than one owned by the instigator. The current system has been running (with only minor modifications) since January 82 at Melbourne. It is actu- ally just a small part of a much broader resource control scheme, which is capable of controlling almost anything that is usually uncontrolled in unix. The rest of this is, as yet, still in a state where it is far too subject to change to be considered for distribution. For the 4.2BSD release, much work has been done to clean up and sanely incorporate the quota code by Sam Lef- fler and Kirk McKusick at The University of California at Berkeley. quota-4.03/doc/quotas.ms0000644000175000001440000002730612124521007012132 00000000000000.\" Copyright (c) 1983 The Regents of the University of California. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)quotas.ms 6.3 (Berkeley) 4/17/91 .\" .EH 'SMM:4-%''Disc Quotas in a \s-2UNIX\s+2 Environment' .OH 'Disc Quotas in a \s-2UNIX\s+2 Environment''SMM:4-%' .ND 5th July, 1983 .TL Disc Quotas in a \s-2UNIX\s+2\s-3\u*\d\s0 Environment .FS * UNIX is a trademark of Bell Laboratories. .FE .AU Robert Elz .AI Department of Computer Science University of Melbourne, Parkville, Victoria, Australia. .AB .PP In most computing environments, disc space is not infinite. The disc quota system provides a mechanism to control usage of disc space, on an individual basis. .PP Quotas may be set for each individual user, on any, or all filesystems. .PP The quota system will warn users when they exceed their allotted limit, but allow some extra space for current work. Repeatedly remaining over quota at logout, will cause a fatal over quota condition eventually. .PP The quota system is an optional part of \s-2VMUNIX\s0 that may be included when the system is configured. .AE .NH 1 Users' view of disc quotas .PP To most users, disc quotas will either be of no concern, or a fact of life that cannot be avoided. The \fIquota\fP\|(1) command will provide information on any disc quotas that may have been imposed upon a user. .PP There are two individual possible quotas that may be imposed, usually if one is, both will be. A limit can be set on the amount of space a user can occupy, and there may be a limit on the number of files (inodes) he can own. .PP .I Quota provides information on the quotas that have been set by the system administrators, in each of these areas, and current usage. .PP There are four numbers for each limit, the current usage, soft limit (quota), hard limit, and number of remaining login warnings. The soft limit is the number of 1K blocks (or files) that the user is expected to remain below. Each time the user's usage goes past this limit, he will be warned. The hard limit cannot be exceeded. If a user's usage reaches this number, further requests for space (or attempts to create a file) will fail with an EDQUOT error, and the first time this occurs, a message will be written to the user's terminal. Only one message will be output, until space occupied is reduced below the limit, and reaches it again, in order to avoid continual noise from those programs that ignore write errors. .PP Whenever a user logs in with a usage greater than his soft limit, he will be warned, and his login warning count decremented. When he logs in under quota, the counter is reset to its maximum value (which is a system configuration parameter, that is typically 3). If the warning count should ever reach zero (caused by three successive logins over quota), the particular limit that has been exceeded will be treated as if the hard limit has been reached, and no more resources will be allocated to the user. The \fBonly\fP way to reset this condition is to reduce usage below quota, then log in again. .NH 2 Surviving when quota limit is reached .PP In most cases, the only way to recover from over quota conditions, is to abort whatever activity was in progress on the filesystem that has reached its limit, remove sufficient files to bring the limit back below quota, and retry the failed program. .PP However, if you are in the editor and a write fails because of an over quota situation, that is not a suitable course of action, as it is most likely that initially attempting to write the file will have truncated its previous contents, so should the editor be aborted without correctly writing the file not only will the recent changes be lost, but possibly much, or even all, of the data that previously existed. .PP There are several possible safe exits for a user caught in this situation. He may use the editor \fB!\fP shell escape command to examine his file space, and remove surplus files. Alternatively, using \fIcsh\fP, he may suspend the editor, remove some files, then resume it. A third possibility, is to write the file to some other filesystem (perhaps to a file on /tmp) where the user's quota has not been exceeded. Then after rectifying the quota situation, the file can be moved back to the filesystem it belongs on. .NH 1 Administering the quota system .PP To set up and establish the disc quota system, there are several steps necessary to be performed by the system administrator. .PP First, the system must be configured to include the disc quota sub-system. This is done by including the line: .DS options QUOTA .DE in the system configuration file, then running \fIconfig\fP\|(8) followed by a system configuration\s-3\u*\d\s0. .FS * See also the document ``Building 4.2BSD UNIX Systems with Config''. .FE .PP Second, a decision as to what filesystems need to have quotas applied needs to be made. Usually, only filesystems that house users' home directories, or other user files, will need to be subjected to the quota system, though it may also prove useful to also include \fB/usr\fR. If possible, \fB/tmp\fP should usually be free of quotas. .PP Having decided on which filesystems quotas need to be set upon, the administrator should then allocate the available space amongst the competing needs. How this should be done is (way) beyond the scope of this document. .PP Then, the \fIedquota\fP\|(8) command can be used to actually set the limits desired upon each user. Where a number of users are to be given the same quotas (a common occurrence) the \fB\-p\fP switch to edquota will allow this to be easily accomplished. .PP Once the quotas are set, ready to operate, the system must be informed to enforce quotas on the desired filesystems. This is accomplished with the \fIquotaon\fP\|(8) command. .I Quotaon will either enable quotas for a particular filesystem, or with the \fB\-a\fP switch, will enable quotas for each filesystem indicated in \fB/etc/fstab\fP as using quotas. See \fIfstab\fP\|(5) for details. Most sites using the quota system, will include the line .DS C /etc/quotaon -a .DE in \fB/etc/rc.local\fP. .PP Should quotas need to be disabled, the \fIquotaoff\fP(8) command will do that, however, should the filesystem be about to be dismounted, the \fIumount\fP\|(8) command will disable quotas immediately before the filesystem is unmounted. This is actually an effect of the \fIumount\fP\|(2) system call, and it guarantees that the quota system will not be disabled if the umount would fail because the filesystem is not idle. .PP Periodically (certainly after each reboot, and when quotas are first enabled for a filesystem), the records retained in the quota file should be checked for consistency with the actual number of blocks and files allocated to the user. The \fIquotacheck\fP\|(8) command can be used to accomplish this. It is not necessary to dismount the filesystem, or disable the quota system to run this command, though on active filesystems inaccurate results may occur. This does no real harm in most cases, another run of .I quotacheck when the filesystem is idle will certainly correct any inaccuracy. .PP The super-user may use the \fIquota\fP\|(1) command to examine the usage and quotas of any user, and the \fIrepquota\fP\|(8) command may be used to check the usages and limits for all users on a filesystem. .NH 1 Some implementation detail. .PP Disc quota usage and information is stored in a file on the filesystem that the quotas are to be applied to. Conventionally, this file is \fBquotas\fR in the root of the filesystem. While this name is not known to the system in any way, several of the user level utilities "know" it, and choosing any other name would not be wise. .PP The data in the file comprises an array of structures, indexed by uid, one structure for each user on the system (whether the user has a quota on this filesystem or not). If the uid space is sparse, then the file may have holes in it, which would be lost by copying, so it is best to avoid this. .PP The system is informed of the existence of the quota file by the \fIsetquota\fP\|(2) system call. It then reads the quota entries for each user currently active, then for any files open owned by users who are not currently active. Each subsequent open of a file on the filesystem, will be accompanied by a pairing with its quota information. In most cases this information will be retained in core, either because the user who owns the file is running some process, because other files are open owned by the same user, or because some file (perhaps this one) was recently accessed. In memory, the quota information is kept hashed by user-id and filesystem, and retained in an LRU chain so recently released data can be easily reclaimed. Information about those users whose last process has recently terminated is also retained in this way. .PP Each time a block is accessed or released, and each time an inode is allocated or freed, the quota system gets told about it, and in the case of allocations, gets the opportunity to object. .PP Measurements have shown that the quota code uses a very small percentage of the system cpu time consumed in writing a new block to disc. .NH 1 Acknowledgments .PP The current disc quota system is loosely based upon a very early scheme implemented at the University of New South Wales, and Sydney University in the mid 70's. That system implemented a single combined limit for both files and blocks on all filesystems. .PP A later system was implemented at the University of Melbourne by the author, but was not kept highly accurately, eg: chown's (etc) did not affect quotas, nor did i/o to a file other than one owned by the instigator. .PP The current system has been running (with only minor modifications) since January 82 at Melbourne. It is actually just a small part of a much broader resource control scheme, which is capable of controlling almost anything that is usually uncontrolled in unix. The rest of this is, as yet, still in a state where it is far too subject to change to be considered for distribution. .PP For the 4.2BSD release, much work has been done to clean up and sanely incorporate the quota code by Sam Leffler and Kirk McKusick at The University of California at Berkeley. quota-4.03/doc/quotadoc.sgml0000644000175000001440000002502712124521007012756 00000000000000
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.03/dqblk_v2.h�������������������������������������������������������������������������������0000644�0001750�0000144�00000002407�12124521007�011360� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 "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.03/rquota.3���������������������������������������������������������������������������������0000644�0001750�0000144�00000001145�12124521007�011100� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quotaon.h��������������������������������������������������������������������������������0000644�0001750�0000144�00000001023�12124521007�011333� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/rquota_svc.c�����������������������������������������������������������������������������0000644�0001750�0000144�00000032162�12124521007�012036� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <rpc/pmap_clnt.h> /* for pmap_unset */ #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> #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 extern int svctcp_socket (u_long __number, int __port, int __reuse); extern int svcudp_socket (u_long __number, int __port, int __reuse); #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 sockaddr_in *addr, ulong rq_proc) { #ifdef HOSTS_ACCESS struct request_info req; #endif char *remote = inet_ntoa(addr->sin_addr); 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(addr->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(svc_getcaller(rqstp->rq_xprt),rqstp->rq_proc)) { 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(svc_getcaller(rqstp->rq_xprt),rqstp->rq_proc)) { 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) { pmap_unset(RQUOTAPROG, RQUOTAVERS); pmap_unset(RQUOTAPROG, EXT_RQUOTAVERS); 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); } int main(int argc, char **argv) { register SVCXPRT *transp; struct sigaction sa; int sock; gettexton(); progname = basename(argv[0]); parse_options(argc, argv); init_kernel_interface(); get_pseudoroot(); pmap_unset(RQUOTAPROG, RQUOTAVERS); pmap_unset(RQUOTAPROG, EXT_RQUOTAVERS); 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); sock = svcudp_socket(RQUOTAPROG, port, 1); transp = svcudp_create(sock == -1 ? RPC_ANYSOCK : sock); if (transp == NULL) { errstr(_("cannot create udp service.\n")); exit(1); } if (!svc_register(transp, RQUOTAPROG, RQUOTAVERS, rquotaprog_1, IPPROTO_UDP)) { errstr(_("unable to register (RQUOTAPROG, RQUOTAVERS, UDP).\n")); exit(1); } if (!svc_register(transp, RQUOTAPROG, EXT_RQUOTAVERS, rquotaprog_2, IPPROTO_UDP)) { errstr(_("unable to register (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n")); exit(1); } sock = svctcp_socket(RQUOTAPROG, port, 1); transp = svctcp_create(sock == -1 ? RPC_ANYSOCK : sock, 0, 0); if (transp == NULL) { errstr(_("cannot create TCP service.\n")); exit(1); } if (!svc_register(transp, RQUOTAPROG, RQUOTAVERS, rquotaprog_1, IPPROTO_TCP)) { errstr(_("unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n")); exit(1); } if (!svc_register(transp, RQUOTAPROG, EXT_RQUOTAVERS, rquotaprog_2, IPPROTO_TCP)) { errstr(_("unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n")); exit(1); } if (!(flags & FL_NODAEMON)) { use_syslog(); daemon(0, 0); } svc_run(); errstr(_("svc_run returned\n")); exit(1); /* NOTREACHED */ } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/autogen.sh�������������������������������������������������������������������������������0000755�0001750�0000144�00000000032�12437305050�011501� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh autoreconf -fvi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaio_xfs.h����������������������������������������������������������������������������0000644�0001750�0000144�00000014531�12124521007�012216� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 */ /* * 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 */ __s32 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; /* * 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) /* * 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_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.03/setquota.c�������������������������������������������������������������������������������0000644�0001750�0000144�00000033515�12437304350�011527� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Set disk quota from command line * * Jan Kara <jack@suse.cz> - sponsored by SuSE CR */ #include "config.h" #include <rpc/rpc.h> #include <sys/types.h> #include <errno.h> #include <stdio.h> #include <string.h> #include <getopt.h> #include <time.h> #include <ctype.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 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] %1$s[-F quotaformat] <user|group>\n\ \t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|<filesystem>...\n\ setquota [-u|-g] %1$s[-F quotaformat] <-p protouser|protogroup> <user|group> -a|<filesystem>...\n\ setquota [-u|-g] %1$s[-F quotaformat] -b [-c] -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\n\ -u, --user set limits for user\n\ -g, --group set limits for group\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\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\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; return -1; } /* Parse options of setquota */ static void parse_options(int argcnt, char **argstr) { int ret, otherargs; char *protoname = NULL; #ifdef RPC_SETQUOTA char *opts = "ghp:urmVF:taTbc"; #else char *opts = "ghp:uVF:taTbc"; #endif struct option long_opts[] = { { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "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_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 && flags & FL_GROUP) { errstr(_("Group and user 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))) 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, 0); if (flags & FL_PROTO) { protoprivs = getprivs(protoid, handles, 0); 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; 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, 0); 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, 0); 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) { errstr(_("cannot write times for %s. Maybe kernel does not support such operation?\n"), _(type2name(flags & FL_USER ? USRQUOTA : GRPQUOTA))); 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.03/convertquota.8���������������������������������������������������������������������������0000644�0001750�0000144�00000002716�12124521007�012331� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.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 \<jack@suse.cz\> ��������������������������������������������������quota-4.03/rpc.rquotad.8����������������������������������������������������������������������������0000644�0001750�0000144�00000005370�12234034700�012041� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quotastats.c�����������������������������������������������������������������������������0000644�0001750�0000144�00000010005�12124521007�012050� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/xqmstats.8�������������������������������������������������������������������������������0000644�0001750�0000144�00000001124�12124521007�011453� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/pot.c������������������������������������������������������������������������������������0000644�0001750�0000144�00000000651�12437304350�010457� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/svc_socket.c�����������������������������������������������������������������������������0000644�0001750�0000144�00000006047�12124521007�012016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 svc_socket (u_long number, int type, int protocol, int port, int reuse) { struct sockaddr_in addr; char rpcdata [1024], servdata [1024]; struct rpcent rpcbuf, *rpcp = NULL; struct servent servbuf, *servp = NULL; int sock, ret; const char *proto = protocol == IPPROTO_TCP ? "tcp" : "udp"; if ((sock = socket (AF_INET, type, protocol)) < 0) { errstr(_("Cannot create socket: %s\n"), strerror(errno)); return -1; } if (reuse) { ret = 1; if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &ret, sizeof(ret)) < 0) { errstr(_("Cannot set socket options: %s\n"), strerror(errno)); return -1; } } memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; if (!port) { ret = getrpcbynumber_r(number, &rpcbuf, rpcdata, sizeof(rpcdata), &rpcp); if (ret == 0 && 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) port = servp->s_port; } } else port = htons(port); if (port) { addr.sin_port = port; if (bind(sock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) < 0) { errstr(_("Cannot bind to given address: %s\n"), strerror(errno)); close (sock); return -1; } } else { /* Service not found? */ close(sock); return -1; } return sock; } /* * Create and bind a TCP socket based on program number */ int svctcp_socket(u_long number, int port, int reuse) { return svc_socket(number, SOCK_STREAM, IPPROTO_TCP, port, reuse); } /* * Create and bind a UDP socket based on program number */ int svcudp_socket(u_long number, int port, int reuse) { return svc_socket(number, SOCK_DGRAM, IPPROTO_UDP, port, reuse); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaio.c��������������������������������������������������������������������������������0000644�0001750�0000144�00000020122�12252407552�011334� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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? */ 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.03/ar-lib�����������������������������������������������������������������������������������0000755�0001750�0000144�00000013302�12513140311�010570� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2013 Free Software Foundation, Inc. # Written by Peter Rosin <peda@lysator.liu.se>. # # 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. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. # 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 <<EOF Usage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...] Members may be specified in a file named with @FILE. EOF exit $? ;; -v | --v*) echo "$me, version $scriptversion" exit $? ;; esac if test $# -lt 3; then func_error "you must specify a program, an action and an archive" fi AR=$1 shift while : do if test $# -lt 2; then func_error "you must specify a program, an action and an archive" fi case $1 in -lib | -LIB \ | -ltcg | -LTCG \ | -machine* | -MACHINE* \ | -subsystem* | -SUBSYSTEM* \ | -verbose | -VERBOSE \ | -wx* | -WX* ) AR="$AR $1" shift ;; *) action=$1 shift break ;; esac done orig_archive=$1 shift func_file_conv "$orig_archive" archive=$file # strip leading dash in $action action=${action#-} delete= extract= list= quick= replace= index= create= while test -n "$action" do case $action in d*) delete=yes ;; x*) extract=yes ;; t*) list=yes ;; q*) quick=yes ;; r*) replace=yes ;; s*) index=yes ;; S*) ;; # the index is always updated implicitly c*) create=yes ;; u*) ;; # TODO: don't ignore the update modifier v*) ;; # TODO: don't ignore the verbose modifier *) func_error "unknown action specified" ;; esac action=${action#?} done case $delete$extract$list$quick$replace,$index in yes,* | ,yes) ;; yesyes*) func_error "more than one action specified" ;; *) func_error "no action specified" ;; esac if test -n "$delete"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi for member do case $1 in @*) func_at_file "${1#@}" -REMOVE "$archive" ;; *) func_file_conv "$1" $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $? ;; esac done elif test -n "$extract"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi if test $# -gt 0; then for member do case $1 in @*) func_at_file "${1#@}" -EXTRACT "$archive" ;; *) func_file_conv "$1" $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $? ;; esac done else $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member do $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $? done fi elif test -n "$quick$replace"; then if test ! -f "$orig_archive"; then if test -z "$create"; then echo "$me: creating $orig_archive" fi orig_archive= else orig_archive=$archive fi for member do case $1 in @*) func_file_conv "${1#@}" set x "$@" "@$file" ;; *) func_file_conv "$1" set x "$@" "$file" ;; esac shift shift done if test -n "$orig_archive"; then $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $? else $AR -NOLOGO -OUT:"$archive" "$@" || exit $? fi elif test -n "$list"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi $AR -NOLOGO -LIST "$archive" || exit $? fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quota_nld.c������������������������������������������������������������������������������0000644�0001750�0000144�00000031006�12634315274�011647� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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); strcpy(dev, "/dev/"); setutent(); endutent(); while ((uent = getutent())) { if (uent->ut_type != USER_PROCESS) continue; /* Entry for a different user? */ if (strcmp(user, uent->ut_user)) 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) { /* * 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(9 + strlen(progname) + 4 + 1); if (!pid_name) { errstr(_("Not enough memory to build PID file name.\n")); return NULL; } sprintf(pid_name, "/var/run/%s.pid", 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 (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(); daemon(0, 0); use_pid_file(); } run(nsock); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaio_generic.h������������������������������������������������������������������������0000644�0001750�0000144�00000001331�12124521007�013024� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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)); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quota.c����������������������������������������������������������������������������������0000644�0001750�0000144�00000031325�12437304350�011010� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1980, 1990 Regents of the University of California. All * rights reserved. * * This code is derived from software contributed to Berkeley by Robert Elz at * The University of Melbourne. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 2. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. 3. All advertising * materials mentioning features or use of this software must display the * following acknowledgement: This product includes software developed by the * University of California, Berkeley and its contributors. 4. Neither the * name of the University nor the names of its contributors may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "config.h" /* * 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> #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_SMARTSIZE 16 #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 static int flags, fmt = -1; char *progname; static void usage(void) { errstr( "%s%s%s%s%s", _("Usage: quota [-guqvswim] [-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 [-qvswugQm] [-F quotaformat] -f filesystem ...\n"), _("\n\ -u, --user display quota for user\n\ -g, --group display quota for group\n\ -q, --quiet print more terse message\n\ -v, --verbose print more verbose message\n\ -s, --human-readable display numbers in human friendly units (MB, GB...)\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 filesystems\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 (flags & FL_SMARTSIZE) 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; 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, !!(flags & FL_QUIETREFUSE)); over = 0; for (q = qlist; q; q = q->dq_next) { bover = iover = 0; if (!(flags & FL_VERBOSE) && !q->dq_dqb.dqb_isoftlimit && !q->dq_dqb.dqb_ihardlimit && !q->dq_dqb.dqb_bsoftlimit && !q->dq_dqb.dqb_bhardlimit) continue; 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], !!(flags & FL_SMARTSIZE)); space2str(q->dq_dqb.dqb_bsoftlimit, numbuf[1], !!(flags & FL_SMARTSIZE)); space2str(q->dq_dqb.dqb_bhardlimit, numbuf[2], !!(flags & FL_SMARTSIZE)); 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], !!(flags & FL_SMARTSIZE)); number2str(q->dq_dqb.dqb_isoftlimit, numbuf[1], !!(flags & FL_SMARTSIZE)); number2str(q->dq_dqb.dqb_ihardlimit, numbuf[2], !!(flags & FL_SMARTSIZE)); 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, _("none")); freeprivs(qlist); dispose_handle_list(handles); return over > 0 ? 1 : 0; } int main(int argc, char **argv) { int ngroups; gid_t gidset[NGROUPS], *gidsetp; int i, ret; struct option long_opts[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, { "user", 0, NULL, 'u' }, { "group", 0, NULL, 'g' }, { "quiet", 0, NULL, 'q' }, { "verbose", 0, NULL, 'v' }, { "human-readable", 0, 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 }, { NULL, 0, NULL, 0 } }; gettexton(); progname = basename(argv[0]); flags |= FL_SHOW_DEVICE; while ((ret = getopt_long(argc, argv, "hguqvsVliQF:wfApm", long_opts, NULL)) != -1) { switch (ret) { case 'g': flags |= FL_GROUP; break; case 'u': flags |= FL_USER; 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': flags |= FL_SMARTSIZE; 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 'V': version(); exit(0); case 'h': default: usage(); } } argc -= optind; argv += optind; if (!(flags & FL_USER) && !(flags & FL_GROUP)) flags |= FL_USER; if (flags & FL_FSLIST && flags & (FL_LOCALONLY | FL_NOAUTOFS)) errstr(_("Warning: Ignoring -%c when filesystem list specified.\n"), flags & FL_LOCALONLY ? 'l' : 'i'); 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) { 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); } exit(ret); } if ((flags & FL_USER) && (flags & FL_GROUP)) usage(); if (flags & FL_USER) for (; argc > 0; argc--, argv++) ret |= showquotas(USRQUOTA, user2uid(*argv, !!(flags & FL_NUMNAMES), NULL), 0, NULL); else if (flags & FL_GROUP) for (; argc > 0; argc--, argv++) ret |= showquotas(GRPQUOTA, group2gid(*argv, !!(flags & FL_NUMNAMES), NULL), 0, NULL); return ret; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quot.8�����������������������������������������������������������������������������������0000644�0001750�0000144�00000002506�12124521007�010564� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH QUOT 8 .SH NAME quot \- summarize filesystem ownership .SH SYNOPSIS .nf \f3quot\f1 [ \f3\-acfguvi\f1 ] [ filesystem... ] .fi .SH DESCRIPTION .IR quot displays the number of kilobytes in the named .I filesystem currently owned by each user or group. Note that this utility currently works only for XFS. .SH OPTIONS .TP .B \-a Generate a report for all mounted filesystems giving the number of kilobytes used by each user or group. .TP .B \-c Display three columns giving file size in kilobytes, number of files of that size, and cumulative total of kilobytes in that size or smaller file. The last row is used as an overflow bucket and is the total of all files greater than 500 kilobytes. .TP .B \-f Display count of kilobytes and number of files owned by each user or group. .TP .B \-g Report on groups. .TP .B \-u Report on users (the default). .TP .B \-v Display three columns containing the number of kilobytes not accessed in the last 30, 60, and 90 days. .TP .B \-i Ignore mountpoints mounted by automounter. .TP .B \-T Avoid truncation of user names longer than 8 characters. .TP .B \-q Do not sort the output. .SH FILES .PD 0 .TP 20 /etc/mtab mounted filesystem table .TP /etc/passwd default set of users .TP /etc/group default set of groups .PD .SH "SEE ALSO" du(1), ls(1). .SH BUGS Currently, only the XFS filesystem type is supported. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/edquota.8��������������������������������������������������������������������������������0000644�0001750�0000144�00000012035�12124521007�011234� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH EDQUOTA 8 .SH NAME edquota \- edit user quotas .SH SYNOPSIS .B edquota [ .B \-p .I protoname ] [ .BR \-u \ | .B \-g ] [ .B \-rm ] [ .B \-F .I format-name ] [ .B \-f .I filesystem ] .IR username .\|.\|. .LP .B edquota [ .BR \-u \ | .B \-g ] [ .B \-F .I format-name ] [ .B \-f .I filesystem ] .B \-t .LP .B edquota [ .BR \-u \ | .B \-g ] [ .B \-F .I format-name ] [ .B \-f .I filesystem ] .B \-T .IR username \ | .IR groupname .\|.\|. .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 or groups may be specified on the command line. If a number is given in the place of user/group name it is treated as an UID/GID. For each user or group a temporary file is created with an .SM ASCII representation of the current disk quotas for that user or group 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 interpereted 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, --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 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.03/quotatab.5�������������������������������������������������������������������������������0000644�0001750�0000144�00000001373�12234034700�011413� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/bylabel.c��������������������������������������������������������������������������������0000644�0001750�0000144�00000014657�12124521007�011273� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Derived from the util-linux/mount/mount_by_label.c source, * currently maintained by Andries Brouwer <aeb@cwi.nl>. * * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@misiek.eu.org> * - added Native Language Support * 2000-01-20 James Antill <james@and.org> * - Added error message if /proc/partitions cannot be opened * 2000-05-09 Erik Troan <ewt@redhat.com> * - Added cache for UUID and disk labels * 2000-11-07 Nathan Scott <nathans@sgi.com> * - Added XFS support */ #include "config.h" #include <stdio.h> #include <sys/param.h> #include <string.h> #include <ctype.h> #include <fcntl.h> #include <unistd.h> #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 { u_char s_dummy1[56]; u_char s_magic[2]; u_char s_dummy2[46]; u_char s_uuid[16]; u_char s_volume_name[16]; }; #define ext2magic(s) ((uint) s.s_magic[0] + (((uint) s.s_magic[1]) << 8)) #define XFS_SUPER_MAGIC "XFSB" #define XFS_SUPER_MAGIC2 "BSFX" struct xfs_super_block { u_char s_magic[4]; u_char s_dummy[28]; u_char s_uuid[16]; u_char s_dummy2[60]; u_char s_fsname[12]; }; #define REISER_SUPER_MAGIC "ReIsEr2Fs" struct reiserfs_super_block { u_char s_dummy1[52]; u_char s_magic[10]; u_char s_dummy2[22]; u_char s_uuid[16]; u_char s_volume_name[16]; }; 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; 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)) { 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; } 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 u_char 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) { u_char 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.03/bylabel.h��������������������������������������������������������������������������������0000644�0001750�0000144�00000000155�12124521007�011264� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef BYLABEL_H_ #define BYLABEL_H_ const char *get_device_name(const char *item); #endif /* BYLABEL_H_ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/install-sh�������������������������������������������������������������������������������0000755�0001750�0000144�00000033255�12513140311�011511� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # 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 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 -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-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 eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test 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` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/rquota_server.c��������������������������������������������������������������������������0000644�0001750�0000144�00000022712�12330473634�012564� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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, u_int 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.03/depcomp����������������������������������������������������������������������������������0000755�0001750�0000144�00000056016�12513140311�011062� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 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 <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. # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 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 <bug-automake@gnu.org>. 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: "UTC" # time-stamp-end: "; # UTC" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaio_v2.c�����������������������������������������������������������������������������0000644�0001750�0000144�00000036500�12252407552�011752� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/warnquota.c������������������������������������������������������������������������������0000644�0001750�0000144�00000077366�12634316110�011713� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 <ctype.h> #include <signal.h> #include <grp.h> #include <time.h> #include <getopt.h> #include <locale.h> #include <langinfo.h> #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_SHORTNUMS 8 #define FL_NODETAILS 16 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; int use_ldap_mail; /* 0 */ int ldap_starttls; /* 0 */ int ldap_tls; /* LDAP_OPT_X_TLS_NEVER */ int ldap_vers; /* LDAP_VERSION3 */ time_t cc_before; #ifdef USE_LDAP_MAIL_LOOKUP int ldap_is_setup; /* 0 */ 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; /* * 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 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) { errstr(_("ldap_initialize() failed: %s\n"), ldap_err2string(ret)); 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) { errstr(_("ldap_start_tls_s() failed: %s\n"), ldap_err2string(ret)); return -1; } } ret = ldap_sasl_bind_s(ldapconn, config->ldap_binddn, LDAP_SASL_SIMPLE, &cred, NULL, NULL, NULL); if(ret < 0) { errstr(_("ldap_sasl_bind_s() failed: %s\n"), ldap_err2string(ret)); 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 */ snprintf(searchbuf, 256, "(%s=%s)", config->ldap_search_attr, user); ret = ldap_search_ext_s(ldapconn, config->ldap_basedn, LDAP_SCOPE_SUBTREE, searchbuf, NULL, 0, NULL, NULL, NULL, 0, &result); if (ret < 0) { errstr(_("Error with %s.\n"), user); errstr(_("ldap_search_ext_s() failed: %s\n"), ldap_err2string(ret)); 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", config->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], flags & FL_SHORTNUMS); space2str(dqb->dqb_bsoftlimit, numbuf[1], flags & FL_SHORTNUMS); space2str(dqb->dqb_bhardlimit, numbuf[2], flags & FL_SHORTNUMS); 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], flags & FL_SHORTNUMS); number2str(dqb->dqb_isoftlimit, numbuf[1], flags & FL_SHORTNUMS); number2str(dqb->dqb_ihardlimit, numbuf[2], flags & FL_SHORTNUMS); 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)); } } } /* * 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 */ 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); (config->charset)[0] = '\0'; setlocale(LC_ALL, NULL); locale = setlocale(LC_MESSAGES, NULL); if (locale && strcasecmp(locale, "posix") && strcasecmp(locale, "c")) { locale = nl_langinfo(CODESET); sstrncpy(config->charset, locale, CNF_BUFFER); } maildev[0] = 0; config->user_signature = config->user_message = config->group_signature = config->group_message = NULL; config->use_ldap_mail = 0; config->ldap_starttls = 0; config->ldap_tls = LDAP_OPT_X_TLS_NEVER; config->ldap_vers = LDAP_VERSION3; config->cc_before = -1; #ifdef USE_LDAP_MAIL_LOOKUP config->ldap_port = config->ldap_is_setup = 0; config->ldap_host[0] = 0; config->ldap_uri[0] = 0; #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') errstr(_("Line %d too long. Truncating.\n"), line); 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, "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, "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_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); #endif else /* not matched at all */ errstr(_("Error in config file (line %d), ignoring\n"), line); } else /* no '=' char in this line */ errstr(_("Possible error in config file (line %d), ignoring\n"), line); } if (bufpos) errstr(_("Unterminated last line, ignoring\n")); #ifdef USE_LDAP_MAIL_LOOKUP if (config->use_ldap_mail) { if (!config->ldap_uri[0]) { snprintf(config->ldap_uri, CNF_BUFFER, "ldap://%s:%d", config->ldap_host, config->ldap_port); 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 send information in more human friendly 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\ -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", 0, NULL, 's' }, { "no-details", 0, NULL, 'd' }, { NULL, 0, NULL, 0 } }; while ((ret = getopt_long(argcnt, argstr, "ugVF:hc:q:a:isd", 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': flags |= FL_SHORTNUMS; break; case 'd': flags |= FL_NODETAILS; 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.03/config.h.in������������������������������������������������������������������������������0000644�0001750�0000144�00000005502�12635010612�011527� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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 <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `ldap' library (-lldap). */ #undef HAVE_LIBLDAP /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the <unistd.h> 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 /* Support for RPC */ #undef RPC /* Allow setting of quotas over RPC */ #undef RPC_SETQUOTA /* 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 /* Version number of package */ #undef VERSION /* Assume quota mount options for root filesystem */ #undef XFS_ROOTHACK /* 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.03/common.h���������������������������������������������������������������������������������0000644�0001750�0000144�00000002337�12452524275�011164� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Various things common for all utilities * */ #ifndef GUARD_COMMON_H #define GUARD_COMMON_H #include <time.h> #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 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); /* Compare two times */ int timespec_cmp(struct timespec *a, struct timespec *b); #endif /* GUARD_COMMON_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quot.h�����������������������������������������������������������������������������������0000644�0001750�0000144�00000010511�12124521007�010637� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1980, 1990 Regents of the University of California. * Copyright (C) 2000, 2001 Silicon Graphics, Inc. [SGI] * All rights reserved. * * [Extensions to support XFS are copyright SGI] * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 2. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. 3. All advertising * materials mentioning features or use of this software must display the * following acknowledgement: This product includes software developed by the * University of California, Berkeley and its contributors. 4. Neither the * name of the University nor the names of its contributors may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #define SEC24HR (60*60*24) /* seconds per day */ typedef struct { __uint32_t id; char name[UT_NAMESIZE + 1]; } idcache_t; typedef struct du { struct du *next; __uint64_t blocks; __uint64_t blocks30; __uint64_t blocks60; __uint64_t blocks90; __uint64_t nfiles; __uint32_t id; } du_t; #define NDU 60000 #define DUHASH 8209 static du_t du[2][NDU]; static du_t *duhash[2][DUHASH]; static int ndu[2]; #define NID 256 #define IDMASK (NID-1) /* * === Start XFS specific types and definitions === */ #include <asm/types.h> /* Structures returned from ioctl XFS_IOC_FSBULKSTAT */ typedef struct xfs_bstime { time_t tv_sec; /* seconds */ __s32 tv_nsec; /* and nanoseconds */ } xfs_bstime_t; typedef struct xfs_bstat { __u64 bs_ino; /* inode number */ __u16 bs_mode; /* type and mode */ __u16 bs_nlink; /* number of links */ __u32 bs_uid; /* user id */ __u32 bs_gid; /* group id */ __u32 bs_rdev; /* device value */ __s32 bs_blksize; /* block size */ __s64 bs_size; /* file size */ xfs_bstime_t bs_atime; /* access time */ xfs_bstime_t bs_mtime; /* modify time */ xfs_bstime_t bs_ctime; /* inode change time */ int64_t bs_blocks; /* number of blocks */ __u32 bs_xflags; /* extended flags */ __s32 bs_extsize; /* extent size */ __s32 bs_extents; /* number of extents */ __u32 bs_gen; /* generation count */ __u16 bs_projid; /* project id */ unsigned char bs_pad[14]; /* pad space, unused */ __u32 bs_dmevmask; /* DMIG event mask */ __u16 bs_dmstate; /* DMIG state info */ __u16 bs_aextents; /* attribute number of extents */ } xfs_bstat_t; /* The user-level BulkStat Request interface structure. */ typedef struct xfs_fsop_bulkreq { __u64 *lastip; /* last inode # pointer */ __s32 icount; /* count of entries in buffer */ void *ubuffer; /* user buffer for inode desc. */ __s32 *ocount; /* output count pointer */ } xfs_fsop_bulkreq_t; #ifndef XFS_IOC_FSBULKSTAT #define XFS_IOC_FSBULKSTAT _IOWR('X', 101, struct xfs_fsop_bulkreq) #endif #define NBSTAT 4069 /* XFS bulkstat inodes */ static void checkXFS(const char *file, const char *fsdir); /* * === End of XFS specific types and definitions === */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaon.8��������������������������������������������������������������������������������0000644�0001750�0000144�00000014211�12330471250�011261� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 \-avugfp ] [ .B \-F .I format-name ] .LP .B quotaoff [ .B \-vugp ] [ .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, --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, --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.03/config.guess�����������������������������������������������������������������������������0000755�0001750�0000144�00000131110�12513140311�012012� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-06-10' # 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 <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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. 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 <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 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 <features.h> #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'` ;; 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=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *: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 ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # 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 <stdio.h> /* 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 <sys/systemcfg.h> 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/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> 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 <unistd.h> 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) echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*: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 '[A-Z]' '[a-z]'``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 ;; 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 ;; 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; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; or32: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 ;; 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}-${VENDOR}-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' </usr/options/cb.name` echo ${UNAME_MACHINE}-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-${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 <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # 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 ;; 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 [ "$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 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 ;; *: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 ;; esac eval $set_cc_for_build cat >$dummy.c <<EOF #ifdef _SEQUENT_ # include <sys/types.h> # include <sys/utsname.h> #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include <sys/param.h> printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include <sys/param.h> # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 <<EOF $0: unable to guess system type This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be pertinent to <config-patches@gnu.org> in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/set_limits_example.c���������������������������������������������������������������������0000644�0001750�0000144�00000002542�12124521007�013536� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/xqmstats.c�������������������������������������������������������������������������������0000644�0001750�0000144�00000003414�12124521007�011532� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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")); 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; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/README.mailserver������������������������������������������������������������������������0000644�0001750�0000144�00000001155�12124521007�012532� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Mail server support by James Bourne <jbourne@hardrock.org> 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.03/quotacheck_v1.c��������������������������������������������������������������������������0000644�0001750�0000144�00000004320�12124521007�012400� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quotacheck_v2.c��������������������������������������������������������������������������0000644�0001750�0000144�00000032600�12252407552�012415� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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) { size_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 (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 (!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.03/dqblk_rpc.h������������������������������������������������������������������������������0000644�0001750�0000144�00000001021�12124521007�011604� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/pot.h������������������������������������������������������������������������������������0000644�0001750�0000144�00000000256�12124521007�010456� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/warnquota.8������������������������������������������������������������������������������0000644�0001750�0000144�00000005105�12234034700�011614� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 Try to report used space, number of used inodes and limits in more appropriate units than the default ones. .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.03/mntopt.h���������������������������������������������������������������������������������0000644�0001750�0000144�00000003102�12124521007�011166� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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_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_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 */ /* 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 */ #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaio_v1.c�����������������������������������������������������������������������������0000644�0001750�0000144�00000026604�12124521007�011743� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1980, 1990 Regents of the University of California. All * rights reserved. * * This code is derived from software contributed to Berkeley by Robert Elz at * The University of Melbourne. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 2. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. 3. All advertising * materials mentioning features or use of this software must display the * following acknowledgement: This product includes software developed by the * University of California, Berkeley and its contributors. 4. Neither the * name of the University nor the names of its contributors may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "config.h" #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.03/m4/��������������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�12635010612�010102� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/m4/iconv.m4������������������������������������������������������������������������������0000644�0001750�0000144�00000006653�12437305023�011417� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/m4/lib-prefix.m4�������������������������������������������������������������������������0000644�0001750�0000144�00000012505�12437305024�012334� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/m4/gettext.m4����������������������������������������������������������������������������0000644�0001750�0000144�00000040521�12437305023�011755� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/m4/progtest.m4���������������������������������������������������������������������������0000644�0001750�0000144�00000005634�12437305024�012147� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/m4/lib-ld.m4�����������������������������������������������������������������������������0000644�0001750�0000144�00000006761�12437305023�011444� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/m4/lib-link.m4���������������������������������������������������������������������������0000644�0001750�0000144�00000055343�12437305023�012002� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/m4/nls.m4��������������������������������������������������������������������������������0000644�0001750�0000144�00000003505�12437305024�011067� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/m4/po.m4���������������������������������������������������������������������������������0000644�0001750�0000144�00000021520�12437305024�010706� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/dqblk_v1.h�������������������������������������������������������������������������������0000644�0001750�0000144�00000000675�12124521007�011364� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/configure��������������������������������������������������������������������������������0000755�0001750�0000144�00001027654�12635010607�011434� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for quota 4.03. # # Report bugs to <jack@suse.cz>. # # # 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 </dev/null exec 6>&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.03' PACKAGE_STRING='quota 4.03' PACKAGE_BUGREPORT='jack@suse.cz' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # ifdef HAVE_STDLIB_H # include <stdlib.h> # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include <memory.h> # endif # include <string.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS WITH_RPC_FALSE WITH_RPC_TRUE RPCGEN WRAP_LIBS EGREP GREP CPP 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 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 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 ac_ct_AR AR 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_nls with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix enable_werror enable_ldapmail enable_ext2direct enable_netlink enable_libwrap enable_rpc enable_rpcsetquota enable_xfs_roothack enable_bsd_behaviour with_proc_mounts ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS 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 CPP RPCGEN' # 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.03 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.03:";; 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-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --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 Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> 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 CPP C preprocessor RPCGEN RPC compiler command 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 <jack@suse.cz>. _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.03 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_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_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 cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by quota $as_me 4.03, 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.13' 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}" != 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.03' 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: # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. 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 -' # 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 # =========================== # Find required base packages # =========================== 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 <stdio.h> 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 <stdarg.h> #include <stdio.h> 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 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 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 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 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 <stdarg.h> #include <stdio.h> 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 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 # =============== # 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 </dev/null | egrep '(GNU|with BFD)' 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 <libintl.h> 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 <stdlib.h> #include <iconv.h> 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 <stdlib.h> #include <iconv.h> 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 <libintl.h> 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 <libintl.h> 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 cflags # ================ CFLAGS="-D_GNU_SOURCE -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" # 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 : CFLAGS="$CFLAGS -Werror" fi # ========= # 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 : build_ldap="yes" { $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 : cat >>confdefs.h <<_ACEOF #define HAVE_LIBLDAP 1 _ACEOF LIBS="-lldap $LIBS" 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 if test "x$build_ldap" = "xyes"; then : LDAP_LIBS="-lldap -llber" $as_echo "#define USE_LDAP_MAIL_LOOKUP 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS USE_LDAP_MAIL_LOOKUP" fi 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 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" >&5 $as_echo_n "checking for DBUS... " >&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 LIBNL3" >&5 $as_echo_n "checking for LIBNL3... " >&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 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 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 <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> 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 <limits.h> #else # include <assert.h> #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 <ac_nonexistent.h> _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 <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> 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 <limits.h> #else # include <assert.h> #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 <ac_nonexistent.h> _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 <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> 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 <string.h> _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 <stdlib.h> _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 <ctype.h> #include <stdlib.h> #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 if test "x$enable_libwrap" != "xno"; then : build_libwrap="yes" 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 : 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 if test "x$build_libwrap" != "xno"; then : WRAP_LIBS="-lwrap" $as_echo "#define HOSTS_ACCESS 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS HOSTS_ACCESS" fi 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 if test x"$build_rpc" != "xno"; then : $as_echo "#define RPC 1" >>confdefs.h COMPILE_OPTS="$COMPILE_OPTS RPC" fi 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 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.03, 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 <jack@suse.cz>." _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.03 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 2>/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 ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$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 ' <confdefs.h | sed ' s/'"$ac_delim"'/"\\\ "/g' >>$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} 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} proc-mounts: ${with_proc_mounts} rpc: ${build_rpc} rpcsetquota: ${enable_rpcsetquota} xfs-roothack: ${enable_xfs_roothack} werror: ${enable_werror} ============================================================================== " >&6;} ������������������������������������������������������������������������������������quota-4.03/quotacheck.8�����������������������������������������������������������������������������0000644�0001750�0000144�00000012735�12124521007�011730� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quotasys.c�������������������������������������������������������������������������������0000644�0001750�0000144�00000105357�12413023536�011554� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 <ctype.h> #include <paths.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/vfs.h> #include <stdint.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]; } /* * 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 name to id */ int name2id(char *name, int qtype, int flag, int *err) { if (qtype == USRQUOTA) return user2uid(name, flag, err); else return group2gid(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 id to user/groupname */ int id2name(int id, int qtype, char *buf) { if (qtype == USRQUOTA) return uid2user(id, buf); else return gid2group(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, int format) { int i; char suffix[8] = " MGT"; qsize_t aspace = space >= 0 ? space : -space; space = qb2kb(space); if (format) { for (i = 3; i > 0; i--) { long long unit = 1LL << (QUOTABLOCK_BITS*i); if (aspace >= unit * 100) { int sign = aspace != space ? -1 : 1; sprintf(buf, "%lld%c", (long long) DIV_ROUND_UP(aspace, unit) * sign, suffix[i]); return; } } sprintf(buf, "%lldK", (long long)space); return; } sprintf(buf, "%lld", (long long)space); } /* * 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, int format) { int i; unsigned long long div; char suffix[8] = " kmgt"; if (format) { long long anum = num >= 0 ? num : -num; int sign = num != anum ? -1 : 1; for (i = 4, div = 1000000000000LL; i > 0; i--, div /= 1000) if (anum >= 100*div) { sprintf(buf, "%lld%c", DIV_ROUND_UP(anum, div) * sign, suffix[i]); return; } } sprintf(buf, "%lld", num); } /* * 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; #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; #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, min(buflen, strlen(optarg) + 1)); 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)) 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)) { 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)) goto add_entry; break; default: if (strcmp(mnt->me_type, MNTTYPE_XFS) && strcmp(mnt->me_type, MNTTYPE_GFS2) && !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; if (!stat("/proc/fs/xfs/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; } /* 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_VFSOLD; kernel_qfmt[kernel_qfmt_num++] = QF_VFSV0; kernel_qfmt[kernel_qfmt_num++] = QF_VFSV1; } else { struct v2_dqstats v2_stats; 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 XFS quota is turned on on given device */ static int xfs_kern_quota_on(const char *dev, int type) { struct xfs_mem_dqinfo info; if (!quotactl(QCMD(Q_XFS_GETQSTAT, type), dev, 0, (void *)&info)) { if (type == USRQUOTA && (info.qs_flags & XFS_QUOTA_UDQ_ACCT)) return 1; if (type == GRPQUOTA && (info.qs_flags & XFS_QUOTA_GDQ_ACCT)) return 1; } return 0; } /* * 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) && xfs_kern_quota_on(mnt->me_devname, type)) /* XFS quota format */ 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); if (qfmt[USRQUOTA] < 0 && qfmt[GRPQUOTA] < 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; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/repquota.8�������������������������������������������������������������������������������0000644�0001750�0000144�00000010765�12223105360�011442� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH REPQUOTA 8 .UC 4 .SH NAME repquota \- summarize quotas for a filesystem .SH SYNOPSIS .B /usr/sbin/repquota [ .B \-vspiug ] [ .B \-c | .B \-C ] [ .B \-t | .B \-n ] [ .B \-F .I format-name ] .IR filesystem .\|.\|. .LP .B /usr/sbin/repquota [ .B \-avtpsiug ] [ .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 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 Try to report used space, number of used inodes and limits in more appropriate units than the default ones. .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 -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.03/setquota.8�������������������������������������������������������������������������������0000644�0001750�0000144�00000010752�12124521007�011443� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH SETQUOTA 8 .SH NAME setquota \- set disk quotas .SH SYNOPSIS .B setquota [ .B \-rm ] [ .B \-u | .B \-g ] [ .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 \-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 \-F .I quotaformat ] .B \-a | .I filesystem... .LP .B setquota .B \-t [ .B \-u | .B \-g ] [ .B \-F .I quotaformat ] .I block-grace .I inode-grace .B \-a | .I filesystem... .LP .B setquota .B \-T [ .B \-u | .B \-g ] [ .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 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 name it is treated as an UID/GID. .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, --prototype=\f2protoname\f1 Use quota settings of user or group .I protoname to set the quota for the named user or group. .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 -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. Times .B block-grace and .B inode-grace are specified in seconds. .TP .B -T, --edit-times Alter times for individual user/group 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.03/quotaon.c��������������������������������������������������������������������������������0000644�0001750�0000144�00000026324�12124521007�011341� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1980, 1990 Regents of the University of California. All * rights reserved. * * This code is derived from software contributed to Berkeley by Robert Elz at * The University of Melbourne. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 2. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. 3. All advertising * materials mentioning features or use of this software must display the * following acknowledgement: This product includes software developed by the * University of California, Berkeley and its contributors. 4. Neither the * name of the University nor the names of its contributors may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "config.h" /* * 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 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 [-guvp] [-F quotaformat] [-x state] -a\n\ \t%s [-guvp] [-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, --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' }, { "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, "afvugpx: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 '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))) flags |= FL_USER | FL_GROUP; 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) { 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)) { /* 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 (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; if (!strcmp(mnt->me_type, MNTTYPE_XFS) || !strcmp(mnt->me_type, MNTTYPE_GFS2)) { if (kern_qfmt_supp(QF_XFS)) on = kern_quota_on(mnt, type, QF_XFS) != -1; } else 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; printf(_("%s quota on %s (%s) is %s\n"), _(type2name(type)), mnt->me_dir, mnt->me_devname, on ? _("on") : _("off")); return on; } 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); } else { if (flags & FL_GROUP) errs += print_state(mnt, GRPQUOTA); if (flags & FL_USER) errs += print_state(mnt, USRQUOTA); } } end_mounts_scan(); return errs; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/COPYING����������������������������������������������������������������������������������0000644�0001750�0000144�00000036160�12203113317�010540� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This package, the quota tools, are made available under the GNU Public License version 2, with the exception of files quota.c, quotaio_v1.c, quotaon.c, quotaops.c, quot.c, and quot.h which are made available under the BSD license (see headers of these files for details). ---------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quot.c�����������������������������������������������������������������������������������0000644�0001750�0000144�00000022537�12124521007�010645� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1980, 1990 Regents of the University of California. * Copyright (C) 2000, 2001 Silicon Graphics, Inc. [SGI] * All rights reserved. * * [Extensions to support XFS are copyright SGI] * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 2. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. 3. All advertising * materials mentioning features or use of this software must display the * following acknowledgement: This product includes software developed by the * University of California, Berkeley and its contributors. 4. Neither the * name of the University nor the names of its contributors may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "config.h" #include <sys/stat.h> #include <sys/param.h> #include <sys/ioctl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <time.h> #include <utmp.h> #include <pwd.h> #include <grp.h> #include "pot.h" #include "quot.h" #include "common.h" #include "mntopt.h" #include "bylabel.h" #include "quotasys.h" #define TSIZE 500 static __uint64_t sizes[TSIZE]; static __uint64_t overflow; static int aflag; static int cflag; static int fflag; static int gflag; static int uflag; static int vflag; static int iflag; static int qflag; static int Tflag; static time_t now; char *progname; static void mounttable(void); static char *idname(__uint32_t, int); static void report(const char *, const char *, int); static void creport(const char *, const char *); static void usage(void) { errstr(_("Usage: %s [-acfugvViTq] [filesystem...]\n"), progname); exit(1); } int main(int argc, char **argv) { int c; now = time(0); progname = basename(argv[0]); while ((c = getopt(argc, argv, "acfguvVTq")) != -1) { switch (c) { case 'a': aflag++; break; case 'c': cflag++; break; case 'f': fflag++; break; case 'g': gflag++; break; case 'u': uflag++; break; case 'v': vflag++; break; case 'i': iflag++; break; case 'q': qflag++; break; case 'T': Tflag++; break; case 'V': version(); exit(0); default: usage(); } } if ((aflag && optind != argc) || (!aflag && optind == argc)) usage(); if (!uflag && !gflag) uflag++; if (init_mounts_scan(aflag ? 0 : argc - optind, argv + optind, (iflag ? MS_NO_AUTOFS : 0)) < 0) return 1; mounttable(); end_mounts_scan(); return 0; } static void mounttable(void) { int doit = 0; struct mount_entry *mntp; while ((mntp = get_next_mount())) { /* Currently, only XFS is implemented... */ if (strcmp(mntp->me_type, MNTTYPE_XFS) == 0) { checkXFS(mntp->me_devname, mntp->me_dir); doit = 1; } /* ...additional filesystems types here. */ if (doit) { if (cflag) creport(mntp->me_devname, mntp->me_dir); if (!cflag && uflag) report(mntp->me_devname, mntp->me_dir, 0); if (!cflag && gflag) report(mntp->me_devname, mntp->me_dir, 1); } } } static int qcmp(du_t * p1, du_t * p2) { if (p1->blocks > p2->blocks) return -1; if (p1->blocks < p2->blocks) return 1; if (p1->id > p2->id) return 1; else if (p1->id < p2->id) return -1; return 0; } static void creport(const char *file, const char *fsdir) { int i; __uint64_t t = 0; printf(_("%s (%s):\n"), file, fsdir); for (i = 0; i < TSIZE - 1; i++) if (sizes[i] > 0) { t += sizes[i] * i; printf(_("%d\t%llu\t%llu\n"), i, (unsigned long long) sizes[i], (unsigned long long) t); } printf(_("%d\t%llu\t%llu\n"), TSIZE - 1, (unsigned long long) sizes[TSIZE - 1], (unsigned long long) (overflow + t)); } static void report(const char *file, const char *fsdir, int type) { du_t *dp; printf(_("%s (%s) %ss:\n"), file, fsdir, _(type2name(type))); if (!qflag) qsort(du[type], ndu[type], sizeof(du[type][0]), (int (*)(const void *, const void *))qcmp); for (dp = du[type]; dp < &du[type][ndu[type]]; dp++) { char *cp; if (dp->blocks == 0) return; printf(_("%8llu "), (unsigned long long) dp->blocks); if (fflag) printf(_("%8llu "), (unsigned long long) dp->nfiles); if ((cp = idname(dp->id, type)) != NULL) { if (Tflag) printf(_("%s"), cp); else printf(_("%-8.8s"), cp); } else printf(_("#%-7d"), dp->id); if (vflag) printf(_(" %8llu %8llu %8llu"), (unsigned long long) dp->blocks30, (unsigned long long) dp->blocks60, (unsigned long long) dp->blocks90); putchar('\n'); } } static idcache_t *getnextent(int type, __uint32_t id, int byid) { struct passwd *pw; struct group *gr; static idcache_t idc; if (type) { /* /etc/group */ if ((gr = byid? getgrgid(id) : getgrent()) == NULL) return NULL; idc.id = gr->gr_gid; strncpy(idc.name, gr->gr_name, UT_NAMESIZE); return &idc; } /* /etc/passwd */ if ((pw = byid? getpwuid(id) : getpwent()) == NULL) return NULL; idc.id = pw->pw_uid; strncpy(idc.name, pw->pw_name, UT_NAMESIZE); return &idc; } static char *idname(__uint32_t id, int type) { idcache_t *ncp, *idp; static idcache_t nc[2][NID]; static int entriesleft[2] = { NID, NID }; /* check cache for name first */ ncp = &nc[type][id & IDMASK]; if (ncp->id == id && ncp->name[0]) return ncp->name; if (entriesleft[type]) { /* * If we haven't gone through the passwd/group file * then fill the cache while seaching for name. * This lets us run through passwd/group serially. */ if (entriesleft[type] == NID) type? setgrent() : setpwent(); while (((idp = getnextent(type, id, 0)) != NULL) && entriesleft[type]) { entriesleft[type]--; ncp = &nc[type][idp->id & IDMASK]; if (ncp->name[0] == '\0' || idp->id == id) memcpy(ncp, idp, sizeof(idcache_t)); if (idp->id == id) return ncp->name; } type? endgrent() : endpwent(); entriesleft[type] = 0; ncp = &nc[type][id & IDMASK]; } /* Not cached - do it the slow way & insert into cache */ if ((idp = getnextent(type, id, 1)) == NULL) return NULL; memcpy(ncp, idp, sizeof(idcache_t)); return ncp->name; } /* * === XFS specific code follows === */ static void acctXFS(xfs_bstat_t *p) { register du_t *dp; du_t **hp; __uint64_t size; __uint32_t i, id; if ((p->bs_mode & S_IFMT) == 0) return; size = howmany((p->bs_blocks * p->bs_blksize), 0x400ULL); if (cflag) { if (!(S_ISDIR(p->bs_mode) || S_ISREG(p->bs_mode))) return; if (size >= TSIZE) { overflow += size; size = TSIZE - 1; } sizes[(int)size]++; return; } for (i = 0; i < 2; i++) { id = (i == 0)? p->bs_uid : p->bs_gid; hp = &duhash[i][id % DUHASH]; for (dp = *hp; dp; dp = dp->next) if (dp->id == id) break; if (dp == 0) { if (ndu[i] >= NDU) return; dp = &du[i][(ndu[i]++)]; dp->next = *hp; *hp = dp; dp->id = id; dp->nfiles = 0; dp->blocks = 0; dp->blocks30 = 0; dp->blocks60 = 0; dp->blocks90 = 0; } dp->blocks += size; if (now - p->bs_atime.tv_sec > 30 * SEC24HR) dp->blocks30 += size; if (now - p->bs_atime.tv_sec > 60 * SEC24HR) dp->blocks60 += size; if (now - p->bs_atime.tv_sec > 90 * SEC24HR) dp->blocks90 += size; dp->nfiles++; } } static void checkXFS(const char *file, const char *fsdir) { xfs_fsop_bulkreq_t bulkreq; __u64 last = 0; __s32 count; int i; int sts; int fsfd; du_t **dp; xfs_bstat_t *buf; /* * Initialize tables between checks; because of the qsort * in report() the hash tables must be rebuilt each time. */ for (sts = 0; sts < TSIZE; sts++) sizes[sts] = 0; overflow = 0; for (i = 0; i < 2; i++) for (dp = duhash[i]; dp < &duhash[i][DUHASH]; dp++) *dp = 0; ndu[0] = ndu[1] = 0; fsfd = open(fsdir, O_RDONLY); if (fsfd < 0) { errstr(_("cannot open %s: %s\n"), fsdir, strerror(errno)); exit(1); } sync(); buf = (xfs_bstat_t *) smalloc(NBSTAT * sizeof(xfs_bstat_t)); memset(buf, 0, NBSTAT * sizeof(xfs_bstat_t)); bulkreq.lastip = &last; bulkreq.icount = NBSTAT; bulkreq.ubuffer = buf; bulkreq.ocount = &count; while ((sts = ioctl(fsfd, XFS_IOC_FSBULKSTAT, &bulkreq)) == 0) { if (count == 0) break; for (i = 0; i < count; i++) acctXFS(&buf[i]); } if (sts < 0) { errstr(_("XFS_IOC_FSBULKSTAT ioctl failed: %s\n"), strerror(errno)); exit(1); } free(buf); close(fsfd); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaio_xfs.c����������������������������������������������������������������������������0000644�0001750�0000144�00000016154�12330470463�012224� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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) 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 }; /* * 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 = k->d_itimer; u->dqb_btime = k->d_btimer; } /* * Convert utility quota format to XFS kernel format */ static inline void 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; k->d_itimer = u->dqb_itime; k->d_btimer = u->dqb_btime; } /* * Initialize quota information */ static int xfs_init_io(struct quota_handle *h) { struct xfs_mem_dqinfo info; int qcmd; qcmd = QCMD(Q_XFS_GETQSTAT, 0); 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)) 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)) 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)) return 0; xfs_util2kerndqblk(&xdqblk, &dquot->dq_dqb); xdqblk.d_flags |= XFS_USRQUOTA(h) ? XFS_USER_QUOTA : XFS_GROUP_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 { xdqblk.d_fieldmask |= FS_DQ_LIMIT_MASK; } qcmd = QCMD(Q_XFS_SETQLIM, h->qh_type); if (quotactl(qcmd, h->qh_quotadev, id, (void *)&xdqblk) < 0) { ; } else { return 0; } return -1; } /* * 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; } /* * 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)) { if (!XFS_USRQUOTA(h) && !XFS_GRPQUOTA(h)) return 0; return generic_scan_dquots(h, process_dquot, xfs_get_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 { /* qh_type == USRQUOTA */ printf(_("Accounting: %s; Enforcement: %s\n"), XQM_ON(XFS_QUOTA_GDQ_ACCT), XQM_ON(XFS_QUOTA_GDQ_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 { /* qh_type == USRQUOTA */ printf(_("Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n"), XQM_ONDISK(XFS_QUOTA_GDQ_ACCT), XQM_ONDISK(XFS_QUOTA_GDQ_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 { /* 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); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/po/��������������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�12635010613�010201� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/po/quot.sed������������������������������������������������������������������������������0000644�0001750�0000144�00000000231�12437305024�011605� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/po/insert-header.sin���������������������������������������������������������������������0000644�0001750�0000144�00000001240�12437305024�013366� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/po/Makevars������������������������������������������������������������������������������0000644�0001750�0000144�00000003374�12437304350�011630� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/po/en@boldquot.header��������������������������������������������������������������������0000644�0001750�0000144�00000002471�12437305024�013556� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/po/cs.po���������������������������������������������������������������������������������0000644�0001750�0000144�00000307774�12634316466�011126� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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: 2015-12-16 18:19+0100\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:253 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "Nalezeno neplatné UUID: %s\n" #: bylabel.c:273 #, 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:1024 quotacheck.c:314 repquota.c:66 #: common.c:126 #, 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:81 repquota.c:148 #: quotaon.c:137 setquota.c:247 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:749 #, 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:380 msgid "Unknown action should be performed.\n" msgstr "Provedena by mÄ›la být neznámá akce.\n" #: warnquota.c:56 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:58 #, 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:65 #, 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:67 #, 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:186 #, c-format msgid "ldap_initialize() failed: %s\n" msgstr "" #: warnquota.c:195 #, c-format msgid "ldap_start_tls_s() failed: %s\n" msgstr "" #: warnquota.c:201 #, c-format msgid "ldap_sasl_bind_s() failed: %s\n" msgstr "" #: warnquota.c:216 #, 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:300 #, c-format msgid "Cannot create pipe: %s\n" msgstr "Nelze vytvoÅ™it rouru: %s\n" #: warnquota.c:306 #, c-format msgid "Cannot fork: %s\n" msgstr "Voláni fork() selhalo: %s\n" #: warnquota.c:311 #, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "Deskriptor nelze zdvojit: %s\n" #: warnquota.c:315 #, c-format msgid "Cannot execute '%s': %s\n" msgstr "„%s“ nelze spustit: %s\n" #: warnquota.c:320 #, c-format msgid "Cannot open pipe: %s\n" msgstr "Nelze otevřít rouru: %s\n" #: warnquota.c:398 #, fuzzy msgid "Could not setup ldap connection.\n" msgstr "Spojení LDAP nelze nastavit.\n" #: warnquota.c:420 #, c-format msgid "Error with %s.\n" msgstr "Chyba u %s.\n" #: warnquota.c:421 #, c-format msgid "ldap_search_ext_s() failed: %s\n" msgstr "" #: warnquota.c:427 #, 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:431 #, 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:441 #, c-format msgid "Could not get values for %s.\n" msgstr "Hodnoty pro %s nebylo možné získat.\n" #: warnquota.c:487 #, 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:539 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" "\n" " Limity bloků Limity souborů\n" #: warnquota.c:540 #, 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:580 #, c-format msgid "Cannot wait for mailer: %s\n" msgstr "Nelze se doÄkat dokonÄení odeslání poÅ¡ty: %s\n" #: warnquota.c:582 msgid "Warning: Mailer exitted abnormally.\n" msgstr "Pozor: Odesílání poÅ¡ty skonÄilo mimořádnÄ›.\n" #: warnquota.c:639 #, 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:662 #, c-format msgid "Cannot parse line %d in quotatab (missing ':')\n" msgstr "V souboru quotatab nelze rozebrat řádek %d (chybí „:“)\n" #: warnquota.c:676 #, 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:696 #, 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:745 #, c-format msgid "Cannot open %s: %s\n" msgstr "%s nelze otevřít: %s\n" #: warnquota.c:765 #, c-format msgid "Line %d too long. Truncating.\n" msgstr "Řádek %d je příliÅ¡ dlouhý. Bude zkrácen.\n" #: warnquota.c:857 #, 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:881 #, c-format msgid "Error in config file (line %d), ignoring\n" msgstr "Chyba v konfiguraÄním souboru (řádek %d), ignoruje se.\n" #: warnquota.c:884 #, c-format msgid "Possible error in config file (line %d), ignoring\n" msgstr "Možná chyba v konfiguraÄním souboru (řádek %d), ignoruje se.\n" #: warnquota.c:887 msgid "Unterminated last line, ignoring\n" msgstr "NeukonÄený poslední řádek, ignoruje se.\n" #: warnquota.c:893 #, 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:915 #, c-format msgid "Cannot open file with group administrators: %s\n" msgstr "Soubor se správci skupin nelze otevřít: %s\n" #: warnquota.c:930 #, 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:939 #, 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:949 #, 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:1012 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 send information in more human friendly " "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" "-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:1093 #, 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:426 #, c-format msgid "error (%d) while opening %s\n" msgstr "chyba (%d) pÅ™i otevírání %s\n" #: quotacheck.c:431 #, c-format msgid "error (%d) while allocating file inode bitmap\n" msgstr "chyba (%d) pÅ™i alokaci bitmapy iuzlů souborů\n" #: quotacheck.c:436 #, c-format msgid "errstr (%d) while allocating directory inode bitmap\n" msgstr "chyba (%d) pÅ™i alokaci bitmapy iuzlů adresářů\n" #: quotacheck.c:441 #, 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:446 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "chyba (%d) pÅ™i zahájení prohledávání iuzlů\n" #: quotacheck.c:454 #, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "Nalezen i_num %ld, bloků %ld\n" #: quotacheck.c:460 msgid "High uid detected.\n" msgstr "Nalezeno vysoké UID.\n" #: quotacheck.c:476 #, 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:500 #, c-format msgid "Cannot stat directory %s: %s\n" msgstr "Údaje o adresáři %s nelze získat: %s\n" #: quotacheck.c:512 #, c-format msgid "" "\n" "Can open directory %s: %s\n" msgstr "" "\n" "Adresář %s nelze otevřít: %s\n" #: quotacheck.c:524 #, 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:535 #, c-format msgid "pushd %s/%s\n" msgstr "pushd %s/%s\n" #: quotacheck.c:551 #, 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:561 msgid "Scanning stored directories from directory stack\n" msgstr "Prohledávají se adresáře uložené na zásobníku adresářů\n" #: quotacheck.c:565 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" "popd %s\n" "Vstupuje se do adresáře %s\n" #: quotacheck.c:577 #, c-format msgid "Leaving %s\n" msgstr "OpouÅ¡tí se %s\n" # FIXME: I18n first argument #: quotacheck.c:617 #, 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:623 #, 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:624 quotacheck.c:942 msgid "Should I continue?" msgstr "Má se pokraÄovat?" #: quotacheck.c:625 quotacheck.c:943 #, 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:630 #, 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:637 #, c-format msgid "Error while syncing quotas on %s: %s\n" msgstr "Chyba pÅ™i synchronizaci kvót na %s: %s\n" #: quotacheck.c:642 #, 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:647 quotaio.c:150 quotasys.c:677 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "Kvótový soubor %s nelze otevřít: %s\n" #: quotacheck.c:687 msgid "Renaming new files to proper names.\n" msgstr "Nové soubory se pÅ™ejmenovávají na správné názvy.\n" #: quotacheck.c:689 #, 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:692 msgid "Old file not found.\n" msgstr "Starý kvótový soubor nenalezen.\n" #: quotacheck.c:695 #, 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:704 msgid "Old file found removed during check!\n" msgstr "Starý soubor byl bÄ›hem kontroly odstranÄ›n!\n" #: quotacheck.c:707 #, 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:713 #, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "Volání EXT2_IOC_GETFLAGS selhalo: %s\n" #: quotacheck.c:717 #, 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:720 #, 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:729 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "Starý kvótový soubor se pÅ™ejmenovává na %s~\n" #: quotacheck.c:735 #, 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:737 #, 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:743 msgid "Renaming new quotafile\n" msgstr "PÅ™ejmenovává se nový kvótový soubor\n" #: quotacheck.c:755 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "Nelze zmÄ›nit práva souboru %s: %s\n" #: quotacheck.c:762 #, c-format msgid "Cannot open new quota file %s: %s\n" msgstr "Nový kvótový soubor %s nelze otevřít: %s\n" #: quotacheck.c:767 #, 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:787 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "Zapisují se data nasbíraná pro třídu %s.\n" #: quotacheck.c:790 #, 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:796 #, 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:823 #, 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:826 msgid "Data dumped.\n" msgstr "Data zapsána.\n" #: quotacheck.c:834 #, 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:838 #, 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:851 #, 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:877 #, 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:879 #, 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:884 #, 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:896 #, 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:901 #, c-format msgid "Substracted %lu bytes.\n" msgstr "OdeÄteno %'lu bajtů.\n" #: quotacheck.c:914 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "Nelze získat údaje o přípojném bodu %s: %s\n" #: quotacheck.c:916 #, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "Přípojný bod %s není adresářem?!\n" #: quotacheck.c:941 #, 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:949 #, 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:957 msgid "Filesystem remounted read-only\n" msgstr "Systém souborů pÅ™epojen jen pro Ätení\n" #: quotacheck.c:960 #, c-format msgid "Scanning %s [%s] " msgstr "Prohledává se %s [%s] " #: quotacheck.c:977 msgid "done\n" msgstr "hotovo\n" # FIXME: plurals #: quotacheck.c:986 #, c-format msgid "Checked %d directories and %d files\n" msgstr "Zkontrolováno %d adresářů a %d souborů\n" #: quotacheck.c:990 #, 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:991 msgid "Filesystem remounted RW.\n" msgstr "Systém souborů pÅ™epojen pro zápis.\n" #: quotacheck.c:1034 #, 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:1040 #, 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:1106 #, c-format msgid "Cannot get system info: %s\n" msgstr "Nelze získat údaje o systému: %s\n" #  FXIME: msgid misses new lines. #: quotacheck.c:1126 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:1140 quotasys.c:767 msgid "Cannot initialize mountpoint scan.\n" msgstr "Prohledávání bodu pÅ™ipojení nelze inicializovat.\n" #: quotacheck.c:1145 #, c-format msgid "Skipping %s [%s]\n" msgstr "PÅ™eskakuje se %s [%s]\n" #: quotacheck.c:1162 #, 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:1167 #, c-format msgid "Detected quota format %s\n" msgstr "ZjiÅ¡tÄ›n formát kvóty %s\n" #: quotacheck.c:1188 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:1206 #, 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" #: quot.c:81 #, c-format msgid "Usage: %s [-acfugvViTq] [filesystem...]\n" msgstr "Použití: %s [-acfugvViTq] [SYSTÉM_SOUBORŮ…]\n" #: quot.c:178 #, c-format msgid "%s (%s):\n" msgstr "%s (%s):\n" #: quot.c:182 quot.c:186 #, c-format msgid "%d\t%llu\t%llu\n" msgstr "%d\t%llu\t%llu\n" #: quot.c:195 #, c-format msgid "%s (%s) %ss:\n" msgstr "%s (%s) objekty třídy %s:\n" #: quot.c:203 quot.c:205 #, c-format msgid "%8llu " msgstr "%8llu " #: quot.c:208 #, c-format msgid "%s" msgstr "%s" #: quot.c:210 #, c-format msgid "%-8.8s" msgstr "%-8.8s" #: quot.c:212 #, c-format msgid "#%-7d" msgstr "Ä%-7d" #: quot.c:214 #, c-format msgid " %8llu %8llu %8llu" msgstr " %8llu %8llu %8llu" #: quot.c:362 #, c-format msgid "cannot open %s: %s\n" msgstr "%s nelze otevřít: %s\n" #: quot.c:382 #, c-format msgid "XFS_IOC_FSBULKSTAT ioctl failed: %s\n" msgstr "IOCTL XFS_IOC_FSBULKSTAT selhalo: %s\n" #: quotasync.c:27 #, fuzzy, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ug] mount-point...\n" " or: %1$s [-ug] -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:34 #, fuzzy, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group 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:42 #, fuzzy, c-format msgid "Report bugs to <%s>.\n" msgstr "Chyby hlaste na <%s>\n" # TODO: quota attribute #: quotasync.c:106 #, c-format msgid "%s quota sync failed: %s\n" msgstr "synchronizace kvóty %s selhala: %s\n" #: quotasync.c:119 #, 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" # kvótový soubor pro třídu %s #: quota.h:24 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:160 #, 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:289 #, 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:294 #, 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:300 msgid "Warning" msgstr "Pozor" #: quota_nld.c:303 msgid "Error" msgstr "Chyba" #: quota_nld.c:305 msgid "Info" msgstr "Na vÄ›domí" #: quota_nld.c:308 msgid "file limit reached" msgstr "limit na soubory dosažen" #: quota_nld.c:311 msgid "file quota exceeded too long" msgstr "kvóta na soubory pÅ™ekroÄena příliÅ¡ dlouho" #: quota_nld.c:314 msgid "file quota exceeded" msgstr "Kvóta na soubory pÅ™ekroÄena" #: quota_nld.c:317 msgid "block limit reached" msgstr "limit na bloky dosažen" #: quota_nld.c:320 msgid "block quota exceeded too long" msgstr "kvóta na bloky pÅ™ekroÄena příliÅ¡ dlouho" #: quota_nld.c:323 msgid "block quota exceeded" msgstr "kvóta na bloky pÅ™ekroÄena" #: quota_nld.c:326 msgid "got below file limit" msgstr "poÄet souborů klesl pod limit" #: quota_nld.c:329 msgid "got below file quota" msgstr "poÄet souborů klesl pod kvótu" #: quota_nld.c:332 msgid "got below block limit" msgstr "poÄet bloků klesl pod limit" #: quota_nld.c:335 msgid "got below block quota" msgstr "poÄet bloků klesl pod kvótu" #: quota_nld.c:338 msgid "unknown quota warning" msgstr "neznámé upozornÄ›ní kvóty" #: quota_nld.c:342 #, 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:355 msgid "Cannot create DBUS message: No enough memory.\n" msgstr "Zprávu D-bus nelze vytvoÅ™it: Nedostatek pamÄ›ti.\n" #: quota_nld.c:373 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:389 #, 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:400 msgid "Undefined program name.\n" msgstr "Název programu není urÄen.\n" #: quota_nld.c:405 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:424 #, c-format msgid "Could not open PID file '%s': %s\n" msgstr "Soubor s PID „%s“ nelze otevřít: %s\n" #: quota_nld.c:430 #, 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:437 #, c-format msgid "Could not close PID file '%s'.\n" msgstr "Soubor s PID „%s“ nebylo možné uzavřít.\n" #: quota_nld.c:467 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:469 #, c-format msgid "Could not store my PID %jd.\n" msgstr "Nebylo možné uložit vlastní PID %jd.\n" #: repquota.c:50 #, 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" "-s, --human-readable show numbers in human friendly units (MB, " "GB, ...)\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 " "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:152 msgid "Repquota cannot report through RPC calls.\n" msgstr "Repquota nedokáže pracovat pÅ™es volání RPC.\n" #: repquota.c:156 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:348 msgid "User" msgstr "Uživatel" #: repquota.c:350 msgid "Group" msgstr "Skupina" # TODO: Internationalize first argument #: repquota.c:353 #, 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:362 msgid "Space" msgstr "místa" # This is first argument of `%s limits' header #: repquota.c:364 msgid "Block" msgstr "bloků" #: repquota.c:365 #, 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:366 #, c-format msgid " %s limits File limits\n" msgstr " Limity %s Limity souborů\n" #: repquota.c:367 #, 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:362 #, 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:366 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:372 msgid "Headers checked.\n" msgstr "HlaviÄky zkontrolovány.\n" #: quotacheck_v2.c:388 #, c-format msgid "Do not know how to buffer format %d\n" msgstr "Neví se, jak bufferovat formát %d\n" #: quotacheck_v2.c:398 #, 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:406 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:414 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:417 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:84 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:95 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:109 msgid "Quota not supported by the filesystem.\n" msgstr "Kvóta není souborovým systémem podporována.\n" #: quotaio.c:129 msgid "Cannot find any quota file to work on.\n" msgstr "Nenalezeny žádné kvótové souboru ke zpracování.\n" #: quotaio.c:134 msgid "Quota file not found or has wrong format.\n" msgstr "Kvótový soubor nenalezen nebo má chybný formát.\n" #: quotaio.c:144 #, c-format msgid "Cannot sync quotas on device %s: %s\n" msgstr "Kvóty na zařízení %s nelze synchronizovat: %s\n" #: quotaio.c:175 #, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "Kvóty na %s nelze inicializovat: %s\n" #: quotaio.c:202 #, 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:212 #, 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:222 #, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "Nový kvótový soubor %s nelze vytvoÅ™it: %s\n" #: quotaio.c:296 #, 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:302 #, 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:22 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:26 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:76 quotaio_v1.c:308 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:214 #, 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:217 #, c-format msgid "*** Status for %s quotas on device %s\n" msgstr "*** Stav kvót %s na zařízení %s\n" #: quotaio_xfs.c:219 quotaio_xfs.c:234 msgid "ON" msgstr "ZAPNUTO" #: quotaio_xfs.c:219 quotaio_xfs.c:234 msgid "OFF" msgstr "VYPNUTO" #: quotaio_xfs.c:221 quotaio_xfs.c:225 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "ÚÄtování: %s; Vynucení: %s\n" #: quotaio_xfs.c:237 quotaio_xfs.c:241 #, c-format msgid "Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n" msgstr "ÚÄtování [ondisk]: %s; Vynucení [ondisk]: %s\n" #: quotaio_xfs.c:250 quotaio_xfs.c:259 #, c-format msgid "Inode: none\n" msgstr "Iuzel: žádný\n" #: quotaio_xfs.c:252 quotaio_xfs.c:261 #, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "Iuzel: Ä. %llu (%'llu bloků, %'u rozsahů)\n" #: quotaon.c:66 #, c-format msgid "" "Usage:\n" "\t%s [-guvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guvp] [-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, --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:79 msgid "turn quotas off for all filesystems" msgstr "vypne kvóty na vÅ¡ech souborových systémech" #: quotaon.c:80 msgid "turn quotas on for all filesystems" msgstr "zapne kvóty na vÅ¡ech souborových systémech" #: quotaon.c:141 msgid "Cannot turn on/off quotas via RPC.\n" msgstr "Kvóty nelze pÅ™es RPC zapnout/vypnout.\n" #: quotaon.c:188 #, c-format msgid "set root_squash on %s: %s\n" msgstr "nastavení root_squash na %s: %s\n" #: quotaon.c:192 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "%s: root_squash na %s vypnuto\n" #: quotaon.c:194 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "%s: root_squash na %s zapnuto\n" #: quotaon.c:212 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "quotactl na %s [%s]: %s\n" # TODO: quotas attribute #: quotaon.c:215 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "%s [%s]: kvóty pro %s vypnuty\n" #: quotaon.c:228 #, c-format msgid "cannot find %s on %s [%s]\n" msgstr "%s nelze na %s [%s] nalézt\n" #: quotaon.c:230 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "použití %s na %s [%s]: %s\n" #: quotaon.c:232 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:234 msgid "Quota format not supported in kernel.\n" msgstr "Formát kvóty není podporován jádrem.\n" # TODO: quotas attribute #: quotaon.c:237 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "%s [%s]: kvóty %s zapnuty\n" #: quotaon.c:277 msgid "Cannot change state of GFS2 quota.\n" msgstr "Stav kvóty GFS2 nelze zmÄ›nit.\n" #: quotaon.c:281 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:306 #, 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:311 #, 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" # TODO: quota attribute #: quotaon.c:342 #, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "Kvóta %s na %s (%s) je %s\n" # kvóta je, zmÄ›ní stav kvót na #: quotaon.c:343 msgid "on" msgstr "zapnuto" # kvóta je, zmÄ›ní stav kvót na #: quotaon.c:343 msgid "off" msgstr "vypnuto" #: quotaon.c:359 #, 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:365 #, 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:367 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:374 #, 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:62 quotaon_xfs.c:82 #, 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:66 #, 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:76 #, 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:87 #, 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:90 #, 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:95 #, 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:99 #, 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:108 #, 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:113 #, 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:118 #, 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:124 msgid "and accounting " msgstr "a úÄtování" #: quotaon_xfs.c:125 #, 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:131 #, 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:146 #, c-format msgid "quotactl on %s: %s\n" msgstr "quotactl na %s: %s\n" # TODO: internationalize second argument #: quotaon_xfs.c:150 #, c-format msgid "%s: %s quotas turned off\n" msgstr "%s: kvóty %s vypnuty\n" # TODO: internationalize second argument #: quotaon_xfs.c:152 #, c-format msgid "%s: %s quotas turned on\n" msgstr "%s: kvóty %s zapnuty\n" #: quotaon_xfs.c:166 #, c-format msgid "Failed to delete quota: %s\n" msgstr "OdstranÄ›ní kvóty selhalo: %s\n" # TODO: internationalize second argument #: quotaon_xfs.c:171 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "%s: bloky kvóty %s smazány\n" #: quotaon_xfs.c:224 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "Neplatný argument „%s“\n" #: quotaops.c:108 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "%s (UID %d): Povolení zamítnuto\n" #: quotaops.c:120 #, 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:131 #, 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:142 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "%s (GID %d): Povolení zamítnuto\n" #: quotaops.c:158 #, 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:183 #, c-format msgid "Cannot write quota for %u on %s: %s\n" msgstr "Kvótu pro %u nelze na %s zapsat: %s\n" #: quotaops.c:232 msgid "Too many parameters to editor.\n" msgstr "PříliÅ¡ mnoho parametrů editoru.\n" #: quotaops.c:240 #, c-format msgid "Cannot exec %s\n" msgstr "%s nelze spustit\n" #: quotaops.c:259 quotaops.c:431 #, c-format msgid "Cannot duplicate descriptor of file to write to: %s\n" msgstr "Deskriptor souboru nelze zmnožit pro zápis: %s\n" # TODO: internationalize first argument #: quotaops.c:261 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "Diskové kvóty pro %s %s (%cid %d):\n" #: quotaops.c:265 #, 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:298 #, 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:301 #, 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:322 quotaops.c:473 #, c-format msgid "Cannot duplicate descriptor of temp file: %s\n" msgstr "Deskriptor doÄasného souboru nelze zmnožit: %s\n" #: quotaops.c:336 #, 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:342 #, fuzzy, c-format msgid "Bad block usage: %s: %s\n" msgstr "Å patná hodtnota: %s: %s\n" #: quotaops.c:349 #, fuzzy, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "Chybný mÄ›kký limit bloků" #: quotaops.c:356 #, 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:363 #, fuzzy, c-format msgid "Bad inode usage: %s: %s\n" msgstr "Å patná hodtnota: %s: %s\n" #: quotaops.c:370 #, fuzzy, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "Chybný mÄ›kký limit iuzlů" #: quotaops.c:377 #, fuzzy, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "Chybný pevný limit iuzlů" # TODO: internationalize first argument #: quotaops.c:433 #, 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:435 quotaops.c:539 #, 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:437 #, c-format msgid "" " Filesystem block grace inode grace\n" msgstr "" " Souborový systém odklad pro bloky odklad pro " "iuzly\n" #: quotaops.c:442 quotaops.c:448 quotaops.c:491 quotaops.c:504 setquota.c:271 #: setquota.c:277 msgid "unset" msgstr "nenastaveno" #: quotaops.c:444 quotaops.c:450 msgid "0seconds" msgstr "0sekund" # TODO: Pluralize #: quotaops.c:446 quotaops.c:452 quotasys.c:364 #, c-format msgid "%useconds" msgstr "%usekund" #: quotaops.c:487 quotaops.c:587 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" "chybný formát:\n" "%s\n" #: quotaops.c:498 quotaops.c:593 msgid "Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n" msgstr "" "Chybné jednotky Äasu. Jednotky jsou „second“, „minute“, „hour“ a „day“.\n" #: quotaops.c:535 #, c-format msgid "Cannot duplicate descriptor of file to edit: %s\n" msgstr "Deskriptor editovaného souboru nelze zmnožit: %s\n" # TODO: Internationalize argumentargumentargumentargumentargument #: quotaops.c:537 #, 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:540 #, c-format msgid " Filesystem Block grace period Inode grace period\n" msgstr "" " Souborový systém Perioda odkladu bloků Perioda odkladu iuzlů\n" #: quotaops.c:566 #, c-format msgid "Cannot reopen temp file: %s\n" msgstr "DoÄasný soubor nelze znovu otevřít: %s\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:55 #, c-format msgid "" "Usage:\n" " setquota [-u|-g] %1$s[-F quotaformat] <user|group>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] <-p protouser|protogroup> <user|" "group> -a|<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] -b [-c] -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" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\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\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:72 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:75 msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group\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:79 edquota.c:101 quota.c:111 #, 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:90 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" #: setquota.c:103 setquota.c:116 #, fuzzy, c-format msgid "%s: %s: %s\n" msgstr "%s: %s\n" #: setquota.c:212 msgid "Group and user quotas cannot be used together.\n" msgstr "Kvóty skupiny a uživatele nelze použít spoleÄnÄ›.\n" #: setquota.c:216 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:220 msgid "Cannot set both individual and global grace time.\n" msgstr "Jednotlivé a globální doby odkladu nelze nastavit najednou.\n" #: setquota.c:224 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:228 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:232 msgid "Cannot set grace times over RPC protocol.\n" msgstr "Doby odkladu nelze nastavit pÅ™es protokol RPC.\n" #: setquota.c:255 msgid "Bad block softlimit" msgstr "Chybný mÄ›kký limit bloků" #: setquota.c:256 msgid "Bad block hardlimit" msgstr "Chybný pevný limit bloků" #: setquota.c:257 msgid "Bad inode softlimit" msgstr "Chybný mÄ›kký limit iuzlů" #: setquota.c:258 msgid "Bad inode hardlimit" msgstr "Chybný pevný limit iuzlů" #: setquota.c:264 setquota.c:276 msgid "Bad block grace time" msgstr "Chybná doba odkladu bloků" #: setquota.c:265 setquota.c:282 msgid "Bad inode grace time" msgstr "Chybná doba odkladu iuzlů" #: setquota.c:288 msgid "Mountpoint not specified.\n" msgstr "Nebyl zadán bod pÅ™ipojení.\n" #: setquota.c:345 #, c-format msgid "Line %d too long.\n" msgstr "Řádek %d je příliÅ¡ dlouhý.\n" #: setquota.c:357 #, c-format msgid "Cannot parse input line %d.\n" msgstr "Vstupní řádek %d nelze rozebrat.\n" #: setquota.c:359 setquota.c:367 setquota.c:376 setquota.c:385 setquota.c:394 #: setquota.c:403 msgid "Exitting.\n" msgstr "KonÄí se.\n" #: setquota.c:360 setquota.c:368 setquota.c:377 setquota.c:386 setquota.c:395 #: setquota.c:404 msgid "Skipping line.\n" msgstr "Řádek bude pÅ™eskoÄen.\n" #: setquota.c:365 #, 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:373 #, 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:382 #, 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:391 #, 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:400 #, 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:443 #, 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:465 #, 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:469 #, 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:472 #, 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:100 #, c-format msgid "user %s does not exist.\n" msgstr "uživatel %s neexistuje.\n" #: quotasys.c:129 #, c-format msgid "group %s does not exist.\n" msgstr "skupina %s neexistuje.\n" #: quotasys.c:231 #, 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:258 #, 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:320 quota.c:290 msgid "none" msgstr "žádný" # TODO: Pluralize #: quotasys.c:352 #, c-format msgid "%ddays" msgstr "%ddnů" #: quotasys.c:354 #, c-format msgid "%02d:%02d" msgstr "%02d:%02d" # TODO: Pluralize #: quotasys.c:366 #, c-format msgid "%uminutes" msgstr "%uminut" # TODO: Pluralize #: quotasys.c:368 #, c-format msgid "%uhours" msgstr "%uhodin" # TODO: Pluralize #: quotasys.c:370 #, c-format msgid "%udays" msgstr "%udnů" # TODO: Pluralize #: quotasys.c:379 msgid "second" msgstr "sekunda" # TODO: Pluralize #: quotasys.c:379 msgid "seconds" msgstr "sekund" # TODO: Pluralize #: quotasys.c:381 msgid "minute" msgstr "minuta" # TODO: Pluralize #: quotasys.c:381 msgid "minutes" msgstr "minut" # TODO: Pluralize #: quotasys.c:383 msgid "hour" msgstr "hodina" # TODO: Pluralize #: quotasys.c:383 msgid "hours" msgstr "hodin" # TODO: Pluralize #: quotasys.c:385 msgid "day" msgstr "den" # TODO: Pluralize #: quotasys.c:385 msgid "days" msgstr "dnů" #: quotasys.c:434 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:436 msgid "K" msgstr "" #: quotasys.c:438 msgid "M" msgstr "" #: quotasys.c:440 msgid "G" msgstr "" #: quotasys.c:442 msgid "T" msgstr "" #: quotasys.c:445 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:449 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:489 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:493 msgid "k" msgstr "" #: quotasys.c:495 msgid "m" msgstr "" #: quotasys.c:497 msgid "g" msgstr "" #: quotasys.c:499 msgid "t" msgstr "" #: quotasys.c:502 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:506 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:660 #, c-format msgid "Cannot stat quota file %s: %s\n" msgstr "O souboru s kvótami %s nelze zjistit údaje: %s\n" #: quotasys.c:806 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:820 #, c-format msgid "Error while releasing file on %s\n" msgstr "Chyba pÅ™i uvolňování souboru na %s\n" #: quotasys.c:879 #, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "Nelze vytvoÅ™it množinu pro sigaction(): %s\n" #: quotasys.c:882 #, c-format msgid "Cannot set signal handler: %s\n" msgstr "Nelze nastavit obsluhu signálu: %s\n" #: quotasys.c:935 #, c-format msgid "Cannot reset signal handler: %s\n" msgstr "Nelze znovu nastavit obsluhu signálu: %s\n" #: quotasys.c:1074 msgid "Cannot open any file with mount points.\n" msgstr "Žádný soubor s body pÅ™ipojení nelze otevřít.\n" #: quotasys.c:1092 #, c-format msgid "Cannot get device name for %s\n" msgstr "Nelze získat název zařízení pro %s\n" #: quotasys.c:1151 #, 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:1157 #, c-format msgid "Cannot statfs() %s: %s\n" msgstr "Nelze vykonat statfs() nad %s: %s\n" #: quotasys.c:1169 #, 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:1174 #, 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:1184 #, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "Nad bodem pÅ™ipojení %s nelze zavolat stat(): %s\n" #: quotasys.c:1253 #, 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:1257 #, 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:1265 #, 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:1275 #, 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:1281 #, c-format msgid "Cannot resolve path %s: %s\n" msgstr "Cestu %s nelze pÅ™eložit: %s\n" #: quotasys.c:1292 #, 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:1298 #, 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:1306 msgid "No correct mountpoint specified.\n" msgstr "Nezadán žádný správný bod pÅ™ipojení.\n" #: quotasys.c:1361 #, 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:88 #, 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:99 #, 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:146 #, c-format msgid "Illegal port number: %s\n" msgstr "Zakázané Äíslo portu: %s\n" #: rquota_svc.c:153 #, 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:183 #, 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:190 #, 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:205 #, c-format msgid "Denied access to host %s\n" msgstr "Přístup ke stroji %s zamítnut\n" #: rquota_svc.c:293 rquota_svc.c:379 msgid "unable to free arguments\n" msgstr "Argumenty nelze uvolnit\n" #: rquota_svc.c:402 #, 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:454 msgid "cannot create udp service.\n" msgstr "UDP službu nelze vytvoÅ™it.\n" #: rquota_svc.c:458 msgid "unable to register (RQUOTAPROG, RQUOTAVERS, UDP).\n" msgstr "nelze zaregistrovat (RQUOTAPROG, RQUOTAVERS, UDP.)\n" #: rquota_svc.c:462 msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n" msgstr "nelze zaregistrovat (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n" #: rquota_svc.c:469 msgid "cannot create TCP service.\n" msgstr "TCP službu nelze vytvoÅ™it.\n" #: rquota_svc.c:473 msgid "unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n" msgstr "nelze zaregistrovat (RQUOTAPROG, RQUOTAVERS, TCP.)\n" #: rquota_svc.c:477 msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" msgstr "nelze zaregistrovat (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" #: rquota_svc.c:486 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:42 #, c-format msgid "Cannot create socket: %s\n" msgstr "Socket nelze vytvoÅ™it: %s\n" #: svc_socket.c:49 #, c-format msgid "Cannot set socket options: %s\n" msgstr "Socketu nelze nastavit parametry: %s\n" #: svc_socket.c:84 #, c-format msgid "Cannot bind to given 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:49 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "Statistika quot Správce kvót XFS\n" #: xqmstats.c:50 #, c-format msgid " reclaims: %u\n" msgstr " uvolnÄ›ní: %u\n" #: xqmstats.c:51 #, c-format msgid " missed reclaims: %u\n" msgstr " nenalezená uvolnÄ›ní: %u\n" #: xqmstats.c:52 #, c-format msgid " dquot dups: %u\n" msgstr " duplikací dquot: %u\n" #: xqmstats.c:53 #, c-format msgid " cache misses: %u\n" msgstr " nenalezení v keÅ¡i: %u\n" #: xqmstats.c:54 #, c-format msgid " cache hits: %u\n" msgstr " zásahů v keÅ¡i: %u\n" #: xqmstats.c:55 #, c-format msgid " dquot wants: %u\n" msgstr " požadavků na dquot: %u\n" #: xqmstats.c:56 #, c-format msgid " shake reclaims: %u\n" msgstr " uvolnÄ›ní setÅ™esením: %u\n" #: xqmstats.c:57 #, c-format msgid " inact reclaims: %u\n" msgstr " uvolnÄ›ní neaktivních: %u\n" #: xqmstats.c:62 #, 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:81 #, 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 [-u|g] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g] [-F formatname] [-f filesystem] -T username|groupname ...\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:85 msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" msgstr "" "\n" "-u, --user upraví údaje o uživateli\n" "-g, --group upraví údaje o skupinÄ›\n" #: edquota.c:89 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:92 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:183 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:187 msgid "Cannot change grace times over RPC protocol.\n" msgstr "Doby odkladu nelze mÄ›nit pÅ™es protokol RPC.\n" #: edquota.c:205 #, 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:211 msgid "fsname mismatch\n" msgstr "fsname (název souborového systému) se neshoduje\n" #: edquota.c:255 msgid "No filesystems with quota detected.\n" msgstr "Nenalezeny žádné souborové systémy s kvótou.\n" #: edquota.c:271 #, c-format msgid "Cannot create temporary file: %s\n" msgstr "Nelze vytvoÅ™it doÄasný soubor: %s\n" #: edquota.c:276 #, 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:283 msgid "Cannot write grace times to file.\n" msgstr "Do souboru nelze zapsat doby odkladu.\n" #: edquota.c:288 edquota.c:307 edquota.c:340 edquota.c:359 #, fuzzy msgid "Cannot stat file with times.\n" msgstr "Žádný soubor s body pÅ™ipojení nelze otevřít.\n" #: edquota.c:294 msgid "Error while editing grace times.\n" msgstr "Chyba pÅ™i úpravÄ› dob odkladu.\n" #: edquota.c:305 edquota.c:357 msgid "Cannot reopen!" msgstr "Nelze znovu otevřít!" #: edquota.c:315 msgid "Failed to parse grace times file.\n" msgstr "Rozbor souboru s dobami odkladu se nezdaÅ™il.\n" #: edquota.c:325 #, 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:328 msgid "Cannot write individual grace times to file.\n" msgstr "Do souboru nelze zapsat jednotlivé doby odkladu.\n" #: edquota.c:334 msgid "Cannot write quotas to file.\n" msgstr "Kvóty nelze do souboru zapsat.\n" #: edquota.c:346 msgid "Error while editing quotas.\n" msgstr "Chyba pÅ™i úpravÄ› kvót.\n" #: edquota.c:368 msgid "Cannot read individual grace times from file.\n" msgstr "Ze souboru nelze naÄíst jednotlivé doby odkladu.\n" #: edquota.c:374 msgid "Cannot read quotas from file.\n" msgstr "Kvóty nelze ze souboru.\n" #: quota.c:85 msgid "Usage: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "Použití: quota [-guqvswim] [-l | [-Q | -A]] [-f FORMÃT]\n" #: quota.c:86 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:87 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:88 msgid "\tquota [-qvswugQm] [-F quotaformat] -f filesystem ...\n" msgstr "\tquota [-qvswugQm] [-F FORMÃT] -f SOUBOROVÃ_SYSTÉM…\n" #: quota.c:89 #, fuzzy msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable display numbers in human friendly units (MB, " "GB...)\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 " "filesystems\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:120 msgid "space" msgstr "místo" #: quota.c:122 msgid "blocks" msgstr "bloky" # FIXME: third argument is first character of first argument # (user/group → u/g-id). This is not localizable. #: quota.c:124 #, 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:127 msgid "Filesystem" msgstr "Souborovy system" # FIXME: printf(3) counts bytes, not columns #: quota.c:128 quota.c:129 msgid "quota" msgstr "kvota" # FIXME: printf(3) counts bytes, not columns #: quota.c:128 quota.c:129 msgid "limit" msgstr "limit" # FIXME: printf(3) counts bytes, not columns #: quota.c:128 quota.c:129 msgid "grace" msgstr "odklad" # FIXME: printf(3) counts bytes, not columns #: quota.c:129 msgid "files" msgstr "souboru" #: quota.c:201 msgid "File limit reached on" msgstr "Omezení poÄtu souborů dosaženo na" #: quota.c:207 msgid "In file grace period on" msgstr "V periodÄ› odkladu poÄtu souborů na" #: quota.c:211 msgid "Over file quota on" msgstr "Kvóta na poÄet souborů pÅ™esažena na" #: quota.c:217 msgid "Block limit reached on" msgstr "Omezení na poÄet bloků dosaženo na" #: quota.c:223 msgid "In block grace period on" msgstr "V periodÄ› odkladu poÄtu bloků na" #: quota.c:227 msgid "Over block quota on" msgstr "Kvóta na poÄet bloků pÅ™ekroÄena na" #: quota.c:396 #, 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:403 msgid "No filesystem specified.\n" msgstr "Nezadán žádný systém souborů.\n" #: quota.c:411 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "Alokace množiny GID (%d): %s\n" #: quota.c:417 #, c-format msgid "getgroups(): %s\n" msgstr "getgroups(): %s\n" #: common.c:124 #, c-format msgid "Quota utilities version %s.\n" msgstr "Kvótové nástroje (quota-tools) verze %s.\n" #: common.c:125 #, c-format msgid "Compiled with:%s\n" msgstr "PÅ™eloženo s:%s\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.03/po/remove-potcdate.sin�������������������������������������������������������������������0000644�0001750�0000144�00000000660�12437305024�013737� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/po/Makefile.in.in������������������������������������������������������������������������0000644�0001750�0000144�00000027441�12437305024�012606� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/po/stamp-po������������������������������������������������������������������������������0000644�0001750�0000144�00000000012�12634316466�011613� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������timestamp ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/po/fr.po���������������������������������������������������������������������������������0000644�0001750�0000144�00000271264�12634316466�011122� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# French translation of quota-tools. # Copyright (C) 2003 Free Software Foundation, Inc. # Jérôme Schell <jerome@myreseau.org>, 2003. # msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: jack@suse.cz\n" "POT-Creation-Date: 2015-12-16 18:19+0100\n" "PO-Revision-Date: 2003-02-21 22:43+0100\n" "Last-Translator: Jérôme 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:253 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "UUID invalide trouvé : %s\n" #: bylabel.c:273 #, c-format msgid "Error checking device name: %s\n" msgstr "Erreur vérification nom de périphérique : %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:1024 quotacheck.c:314 repquota.c:66 #: common.c:126 #, 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:81 repquota.c:148 #: quotaon.c:137 setquota.c:247 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-tête 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:749 #, 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 créer 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:380 msgid "Unknown action should be performed.\n" msgstr "Une action inconnue doit être exécutée.\n" #: warnquota.c:56 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 mécanisme de\n" "quotas utilisé sur ce système. Voici les dépassements relevés :\n" "\n" #: warnquota.c:58 #, 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 espérons que vous ferez de la place avant que votre période de\n" "sursis n'expire.\n" "\n" "En clair, tout cela signifie que le système 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 période de sursis\n" "expire, le système vous empéchera de créer de nouveaux fichiers.\n" "\n" "Pour plus de renseignements, veuillez nous contacter au %s\n" "ou par téléphone au %s.\n" #: warnquota.c:65 #, 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 mécanisme de quotas utilisé sur ce système. Voici les dépassements " "relevés :\n" "\n" #: warnquota.c:67 #, 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 données du groupe avant que la\n" "période de sursis n'expire.\n" "\n" "En clair, tout cela signifie que le système 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 période de sursis\n" "expire, le système vous empéchera, à vous ainsi qu'aux autres membres du\n" "groupe, de créer de nouveaux fichiers appartenant à ce groupe.\n" "\n" "Pour plus de renseignements, veuillez nous contacter au %s\n" "ou par téléphone au %s.\n" #: warnquota.c:186 #, c-format msgid "ldap_initialize() failed: %s\n" msgstr "" #: warnquota.c:195 #, c-format msgid "ldap_start_tls_s() failed: %s\n" msgstr "" #: warnquota.c:201 #, c-format msgid "ldap_sasl_bind_s() failed: %s\n" msgstr "" #: warnquota.c:216 #, 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:300 #, fuzzy, c-format msgid "Cannot create pipe: %s\n" msgstr "Impossible de créer un tube : %s\n" #: warnquota.c:306 #, fuzzy, c-format msgid "Cannot fork: %s\n" msgstr "Impossible d'exécuter fork() : %s\n" #: warnquota.c:311 #, fuzzy, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "Impossible de dupliquer le descripteur : %s\n" #: warnquota.c:315 #, fuzzy, c-format msgid "Cannot execute '%s': %s\n" msgstr "Impossible d'exécuter « %s » : %s\n" #: warnquota.c:320 #, fuzzy, c-format msgid "Cannot open pipe: %s\n" msgstr "Impossible d'ouvrir « pine » : %s\n" #: warnquota.c:398 msgid "Could not setup ldap connection.\n" msgstr "" #: warnquota.c:420 #, fuzzy, c-format msgid "Error with %s.\n" msgstr "Erreur lors de la modification des quotas.\n" #: warnquota.c:421 #, c-format msgid "ldap_search_ext_s() failed: %s\n" msgstr "" #: warnquota.c:427 #, c-format msgid "Multiple entries found for client %s (%d).\n" msgstr "" #: warnquota.c:431 #, c-format msgid "Entry not found for client %s.\n" msgstr "" #: warnquota.c:441 #, fuzzy, c-format msgid "Could not get values for %s.\n" msgstr "Impossible d'obtenir le nom de périphérique pour %s\n" #: warnquota.c:487 #, 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:539 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" "\n" " Limites bloc Limites fichiers\n" #: warnquota.c:540 #, c-format msgid "" "Filesystem used soft hard grace used soft hard grace\n" msgstr "" "Système fichiers utilisé souple stricte sursis utilisé souple stricte " "sursis\n" #: warnquota.c:580 #, fuzzy, c-format msgid "Cannot wait for mailer: %s\n" msgstr "Impossible d'attendre le client de messagerie : %s\n" #: warnquota.c:582 msgid "Warning: Mailer exitted abnormally.\n" msgstr "" "Attention : le client de messagerie s'est terminé de manière inattendue.\n" #: warnquota.c:639 #, 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 périphériques.\n" #: warnquota.c:662 #, 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:676 #, fuzzy, c-format msgid "Cannot stat device %s (maybe typo in quotatab)\n" msgstr "" "Impossible d'exécuter stat() sur le périphérique %s (erreur de syntaxe dans " "quotatab ?)\n" #: warnquota.c:696 #, c-format msgid "" "Incorrect format string for variable %s.\n" "Unrecognized expression %%%c.\n" msgstr "" #: warnquota.c:745 #, fuzzy, c-format msgid "Cannot open %s: %s\n" msgstr "Impossible d'ouvrir %s : %s\n" #: warnquota.c:765 #, c-format msgid "Line %d too long. Truncating.\n" msgstr "Ligne %d trop longue. Tronquée.\n" #: warnquota.c:857 #, c-format msgid "Cannot parse time at CC_BEFORE variable (line %d).\n" msgstr "" #: warnquota.c:881 #, c-format msgid "Error in config file (line %d), ignoring\n" msgstr "Erreur dans le fichier de configuration (ligne %d), ignorée\n" #: warnquota.c:884 #, c-format msgid "Possible error in config file (line %d), ignoring\n" msgstr "Erreur probable dans le fichier de configuration (ligne %d), ignorée\n" #: warnquota.c:887 msgid "Unterminated last line, ignoring\n" msgstr "Dernière ligne non terminée, ignorée\n" #: warnquota.c:893 #, 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:915 #, 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:930 #, 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:939 #, 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:949 #, c-format msgid "" "Parse error at line %d. Trailing characters after administrators name.\n" msgstr "" "Erreur d'analyse à la ligne %d. Caractères parasites après le nom des " "administrateurs.\n" #: warnquota.c:1012 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 send information in more human friendly " "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" "-h, --help display this help message and exit\n" "-v, --version display version information and exit\n" "\n" msgstr "" #: warnquota.c:1093 #, 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 mémoire.\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 résultats risque d'être " "imprécis.\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:426 #, c-format msgid "error (%d) while opening %s\n" msgstr "erreur (%d) lors de l'ouverture de %s\n" #: quotacheck.c:431 #, 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:436 #, fuzzy, c-format msgid "errstr (%d) while allocating directory inode bitmap\n" msgstr "errstr (%d) lors de l'allocation de la bitmap des inodes répertoire\n" #: quotacheck.c:441 #, 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:446 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "erreur (%d) lors du démarrage de l'analyse d'inode\n" #: quotacheck.c:454 #, fuzzy, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "Trouvé i_num %ld\n" #: quotacheck.c:460 msgid "High uid detected.\n" msgstr "" #: quotacheck.c:476 #, c-format msgid "Something weird happened while scanning. Error %d\n" msgstr "Événement inattendu lors de l'analyse. Erreur %d\n" #: quotacheck.c:500 #, fuzzy, c-format msgid "Cannot stat directory %s: %s\n" msgstr "" "\n" "Possibilité ouverture répertoire %s : %s\n" #: quotacheck.c:512 #, c-format msgid "" "\n" "Can open directory %s: %s\n" msgstr "" "\n" "Possibilité ouverture répertoire %s : %s\n" #: quotacheck.c:524 #, 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'exécuter stat() sur « %s/%s » : %s\n" "Il vaudrait mieux lancer fsck d'abord !\n" "Abandon...\n" #: quotacheck.c:535 #, c-format msgid "pushd %s/%s\n" msgstr "pushd %s/%s\n" #: quotacheck.c:551 #, 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:561 msgid "Scanning stored directories from directory stack\n" msgstr "Parcours des répertoires stockés depuis la pile des répertoires\n" #: quotacheck.c:565 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" "popd %s\n" "Entrée dans le répertoire %s\n" #: quotacheck.c:577 #, c-format msgid "Leaving %s\n" msgstr "Quitte %s\n" #: quotacheck.c:617 #, c-format msgid "Going to check %s quota file of %s\n" msgstr "Sur le point de vérifier %s fichier de quotas de %s\n" #: quotacheck.c:623 #, 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:624 quotacheck.c:942 #, fuzzy msgid "Should I continue?" msgstr "Dois-je continuer" #: quotacheck.c:625 quotacheck.c:943 #, c-format msgid "As you wish... Canceling check of this file.\n" msgstr "Suivant vos désirs... Abandon de la vérification de ce fichier.\n" #: quotacheck.c:630 #, 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 désactiver les quotas ou utiliser -f pour forcer la vérification.\n" #: quotacheck.c:637 #, 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:642 #, 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:647 quotaio.c:150 quotasys.c:677 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "Impossible d'ouvrir le fichier de quotas %s : %s\n" #: quotacheck.c:687 #, fuzzy msgid "Renaming new files to proper names.\n" msgstr "Renommage du nouveau fichier de quotas\n" #: quotacheck.c:689 #, 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:692 msgid "Old file not found.\n" msgstr "Ancien fichier non trouvé.\n" #: quotacheck.c:695 #, 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:704 msgid "Old file found removed during check!\n" msgstr "" #: quotacheck.c:707 #, 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:713 #, fuzzy, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "Échec de ioctl XFS_IOC_FSBULKSTAT : %s\n" #: quotacheck.c:717 #, c-format msgid "Quota file %s has IMMUTABLE flag set. Clearing.\n" msgstr "" #: quotacheck.c:720 #, 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:729 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "Renomme l'ancien fichier de quotas en %s~\n" #: quotacheck.c:735 #, 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:737 #, 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:743 msgid "Renaming new quotafile\n" msgstr "Renommage du nouveau fichier de quotas\n" #: quotacheck.c:755 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "Impossible de changer les permissions de %s : %s\n" #: quotacheck.c:762 #, 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:767 #, c-format msgid "Warning: Cannot set EXT2 flags on %s: %s\n" msgstr "" #: quotacheck.c:787 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "Déchargement des données récupérées pour %ss.\n" #: quotacheck.c:790 #, 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:796 #, 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:823 #, 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:826 msgid "Data dumped.\n" msgstr "Données déchargées.\n" #: quotacheck.c:834 #, c-format msgid "Cannot find checked quota file for %ss on %s!\n" msgstr "Impossible de trouver le fichier de quotas vérifié pour %ss sur %s !\n" #: quotacheck.c:838 #, c-format msgid "" "Cannot turn %s quotas off on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" "Impossible de désactiver les quotas %s sur %s : %s\n" "Le noyau ne sera pas informé des modifications que quotacheck a effectué.\n" #: quotacheck.c:851 #, 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:877 #, c-format msgid "Substracting space used by old %s quota file.\n" msgstr "" #: quotacheck.c:879 #, c-format msgid "" "Old %s file name could not been determined. Usage will not be subtracted.\n" msgstr "" #: quotacheck.c:884 #, c-format msgid "Cannot stat old %s quota file %s: %s. Usage will not be subtracted.\n" msgstr "" #: quotacheck.c:896 #, c-format msgid "" "Quota structure for %s owning quota file not present! Something is really " "wrong...\n" msgstr "" #: quotacheck.c:901 #, c-format msgid "Substracted %lu bytes.\n" msgstr "" #: quotacheck.c:914 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "Impossible d'exécuter stat() sur le point de montage %s : %s\n" #: quotacheck.c:916 #, fuzzy, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "Le point de montage %s n'est pas un répertoire ?!\n" #: quotacheck.c:941 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only. Counted values might not " "be right.\n" msgstr "" "Impossible de remonter le système de fichier monté sur %s en lecture seule. " "Les valeurs comptabilisées riquent d'être fausses.\n" #: quotacheck.c:949 #, 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 système de fichier monté sur %s en lecture seule, " "les valeurs comptabilisées riquent d'être fausses.\n" "Veuillez interrompre tous les programmes qui écrivent sur ce système de " "fichiers ou utilisez l'option -m pour forcer la vérification.\n" #: quotacheck.c:957 msgid "Filesystem remounted read-only\n" msgstr "Système de fichiers remonté en lecture seule\n" #: quotacheck.c:960 #, c-format msgid "Scanning %s [%s] " msgstr "Parcours de %s [%s] " #: quotacheck.c:977 msgid "done\n" msgstr "terminé\n" #: quotacheck.c:986 #, c-format msgid "Checked %d directories and %d files\n" msgstr "Vérifié %d répertoires et %d fichiers\n" #: quotacheck.c:990 #, c-format msgid "" "Cannot remount filesystem %s read-write. cannot write new quota files.\n" msgstr "" #: quotacheck.c:991 msgid "Filesystem remounted RW.\n" msgstr "Système de fichiers remonté en lecture-écriture.\n" #: quotacheck.c:1034 #, fuzzy, c-format msgid "Cannot find quota option on filesystem %s with quotas!\n" msgstr "" "Impossible de trouver le type de quota sur le système de fichiers %s !\n" #: quotacheck.c:1040 #, 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:1106 #, fuzzy, c-format msgid "Cannot get system info: %s\n" msgstr "Impossible de fixer les options de la socket : %s\n" #: quotacheck.c:1126 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:1140 quotasys.c:767 #, fuzzy msgid "Cannot initialize mountpoint scan.\n" msgstr "Impossible d'initialiser l'analyse du point de montage.\n" #: quotacheck.c:1145 #, c-format msgid "Skipping %s [%s]\n" msgstr "Non traitement de %s [%s]\n" #: quotacheck.c:1162 #, c-format msgid "" "Cannot guess format from filename on %s. Please specify format on " "commandline.\n" msgstr "" "Impossible de deviner le format d'après le nom de fichier sur %s. Veuillez " "préciser le format sur la ligne de commande.\n" #: quotacheck.c:1167 #, c-format msgid "Detected quota format %s\n" msgstr "Format de quotas détecté %s\n" #: quotacheck.c:1188 #, fuzzy msgid "" "Cannot find filesystem to check or filesystem not mounted with quota " "option.\n" msgstr "" "Impossible de trouver un système de fichiers à vérifier ou système de " "fichiers monté sans l'option de quotas.\n" #: quotacheck.c:1206 #, c-format msgid "" "Allocated %d bytes memory\n" "Free'd %d bytes\n" "Lost %d bytes\n" msgstr "" "%d octets de mémoire alloués\n" "%d octets libérés\n" "%d octets perdus\n" #: quot.c:81 #, fuzzy, c-format msgid "Usage: %s [-acfugvViTq] [filesystem...]\n" msgstr "Utilisation : %s [-acfugvV] [systèmefichiers...]\n" #: quot.c:178 #, c-format msgid "%s (%s):\n" msgstr "%s (%s) :\n" #: quot.c:182 quot.c:186 #, c-format msgid "%d\t%llu\t%llu\n" msgstr "%d\t%llu\t%llu\n" #: quot.c:195 #, fuzzy, c-format msgid "%s (%s) %ss:\n" msgstr "%s (%s) %s :\n" #: quot.c:203 quot.c:205 #, c-format msgid "%8llu " msgstr "%8llu " #: quot.c:208 #, c-format msgid "%s" msgstr "" #: quot.c:210 #, c-format msgid "%-8.8s" msgstr "%-8.8s" #: quot.c:212 #, c-format msgid "#%-7d" msgstr "#%-7d" #: quot.c:214 #, c-format msgid " %8llu %8llu %8llu" msgstr " %8llu %8llu %8llu" #: quot.c:362 #, c-format msgid "cannot open %s: %s\n" msgstr "Impossible d'ouvrir %s : %s\n" #: quot.c:382 #, c-format msgid "XFS_IOC_FSBULKSTAT ioctl failed: %s\n" msgstr "Échec de ioctl XFS_IOC_FSBULKSTAT : %s\n" #: quotasync.c:27 #, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ug] mount-point...\n" " or: %1$s [-ug] -a\n" " or: %1$s -h | -V\n" "\n" msgstr "" #: quotasync.c:34 #, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group 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:42 #, fuzzy, c-format msgid "Report bugs to <%s>.\n" msgstr "Rapports de bugs à %s\n" #: quotasync.c:106 #, fuzzy, c-format msgid "%s quota sync failed: %s\n" msgstr "Impossible d'exécuter stat() sur le fichier de quotas %s : %s\n" #: quotasync.c:119 #, 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 "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 démarre le service quotas en avant-plan\n" " -s --no-setquota désactive l'utilisation d'appels distants à setquota " "(défaut)\n" " -S --setquota active l'utilisation d'appels distants à setquota\n" #: quota_nld.c:119 rquota_svc.c:160 #, 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 créer 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 créer 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 créer la socket : %s\n" #: quota_nld.c:289 #, c-format msgid "Failed to find tty of user %llu to report warning to.\n" msgstr "" #: quota_nld.c:294 #, c-format msgid "Failed to open tty %s of user %llu to report warning.\n" msgstr "" #: quota_nld.c:300 msgid "Warning" msgstr "" #: quota_nld.c:303 msgid "Error" msgstr "" #: quota_nld.c:305 msgid "Info" msgstr "" #: quota_nld.c:308 #, fuzzy msgid "file limit reached" msgstr "Limite de fichiers atteinte" #: quota_nld.c:311 msgid "file quota exceeded too long" msgstr "" #: quota_nld.c:314 msgid "file quota exceeded" msgstr "" #: quota_nld.c:317 #, fuzzy msgid "block limit reached" msgstr "Limite de blocs atteinte" #: quota_nld.c:320 msgid "block quota exceeded too long" msgstr "" #: quota_nld.c:323 #, fuzzy msgid "block quota exceeded" msgstr "Quota dépassement blocs activé" #: quota_nld.c:326 msgid "got below file limit" msgstr "" #: quota_nld.c:329 #, fuzzy msgid "got below file quota" msgstr "Quota dépassement fichiers activé" #: quota_nld.c:332 #, fuzzy msgid "got below block limit" msgstr "limite souple bloc" #: quota_nld.c:335 #, fuzzy msgid "got below block quota" msgstr "Quota dépassement blocs activé" #: quota_nld.c:338 msgid "unknown quota warning" msgstr "" #: quota_nld.c:342 #, 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:355 msgid "Cannot create DBUS message: No enough memory.\n" msgstr "" #: quota_nld.c:373 msgid "Failed to write message to dbus: No enough memory.\n" msgstr "" #: quota_nld.c:389 #, c-format msgid "Failed to read or parse quota netlink message: %s\n" msgstr "" #: quota_nld.c:400 msgid "Undefined program name.\n" msgstr "" #: quota_nld.c:405 #, fuzzy msgid "Not enough memory to build PID file name.\n" msgstr "Pas assez de mémoire.\n" #: quota_nld.c:424 #, fuzzy, c-format msgid "Could not open PID file '%s': %s\n" msgstr "Impossible d'ouvrir le fichier %s : %s\n" #: quota_nld.c:430 #, c-format msgid "Could not write daemon's PID into '%s'.\n" msgstr "" #: quota_nld.c:437 #, c-format msgid "Could not close PID file '%s'.\n" msgstr "" #: quota_nld.c:467 msgid "Could not register PID file removal on SIGTERM.\n" msgstr "" #: quota_nld.c:469 #, c-format msgid "Could not store my PID %jd.\n" msgstr "" #: repquota.c:50 #, 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" "-s, --human-readable show numbers in human friendly units (MB, " "GB, ...)\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 " "quotas\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: repquota.c:152 #, fuzzy msgid "Repquota cannot report through RPC calls.\n" msgstr "Repquota ne peut pas générer de rapport en utilisant des appels RPC.\n" #: repquota.c:156 msgid "Specified both -n and -t but only one of them can be used.\n" msgstr "" "Spécification de -n et -t alors qu'un seul des deux peut être utilisé à la " "fois.\n" #: repquota.c:348 msgid "User" msgstr "Utilisateur" #: repquota.c:350 msgid "Group" msgstr "Groupe" #: repquota.c:353 #, c-format msgid "*** Report for %s quotas on device %s\n" msgstr "*** Rapport pour les quotas %s sur le périphérique %s\n" #: repquota.c:362 msgid "Space" msgstr "" #: repquota.c:364 #, fuzzy msgid "Block" msgstr "blocs" #: repquota.c:365 #, c-format msgid "Block grace time: %s; Inode grace time: %s\n" msgstr "Période de sursis bloc : %s ; période de sursis inode : %s\n" #: repquota.c:366 #, fuzzy, c-format msgid " %s limits File limits\n" msgstr " Limites bloc Limites fichier\n" #: repquota.c:367 #, 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'entrée 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'entrée pour l'id %u est tronquée.\n" #: quotacheck_v1.c:64 msgid "Loading first quota entry with grace times.\n" msgstr "Chargement de la première entrée 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 première entrée 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 réglages des quotas...\n" #: quotacheck_v1.c:78 msgid "First entry loaded.\n" msgstr "Première entrée chargée.\n" #: quotacheck_v2.c:55 msgid "Checking quotafile info...\n" msgstr "Vérification 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 réglages 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 entrées 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 "" "Réglage des temps de sursis et autres drapeaux aux valeurs par défaut.\n" "Considère le nombre de blocs comme étant %u.\n" #: quotacheck_v2.c:102 msgid "File info done.\n" msgstr "Informations fichier terminées.\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 "Entrées 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 utilisées : 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 possède plus de structures. Intervention de l'utilisateur nécessaire " "(utilisez -i pour le mode interactif ou -n pour une réponse 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 "Référence à un bloc illégal %u" #: quotacheck_v2.c:259 #, c-format msgid "Block %u in tree referenced twice" msgstr "Deux références dans l'arbre pour le bloc %u" #: quotacheck_v2.c:275 #, c-format msgid "Illegal free block reference to block %u" msgstr "Référence bloc libre illégale vers le bloc %u" #: quotacheck_v2.c:278 #, c-format msgid "Corrupted number of used entries (%u)" msgstr "Nombre d'entrées utilisées 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'après le nom de fichier sur %s. Veuillez " "préciser le format sur la ligne de commande.\n" #: quotacheck_v2.c:346 msgid "Checking quotafile headers...\n" msgstr "Vérification des en-têtes 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-tête 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 réglages des quotas...\n" #: quotacheck_v2.c:358 #, c-format msgid "WARNING - Quota file %s has corrupted headers\n" msgstr "ATTENTION - Les en-têtes du fichier de quotas %s sont corrompus\n" #: quotacheck_v2.c:362 #, 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:366 msgid "Continue checking assuming version from command line?" msgstr "" #: quotacheck_v2.c:372 msgid "Headers checked.\n" msgstr "En-têtes vérifiés.\n" #: quotacheck_v2.c:388 #, c-format msgid "Do not know how to buffer format %d\n" msgstr "" #: quotacheck_v2.c:398 #, c-format msgid "Headers of file %s checked. Going to load data...\n" msgstr "En-têtes du fichier %s vérifiés. Chargement des données imminent...\n" #: quotacheck_v2.c:406 #, fuzzy msgid "Cannot gather quota data. Tree root node corrupted.\n" msgstr "" "Impossible de récupérer les données des quotas. Noeud racine de l'arbre " "corrompu.\n" #: quotacheck_v2.c:414 msgid "WARNING - Some data might be changed due to corruption.\n" msgstr "" "ATTENTION - Certaines données risquent d'être modifiées suite à la " "corruption.\n" #: quotacheck_v2.c:417 msgid "Not found any corrupted blocks. Congratulations.\n" msgstr "Aucun bloc corrompu n'a été trouvé. Félicitations.\n" #: quotaio.c:62 msgid "Only RPC quota format is allowed on NFS filesystem.\n" msgstr "" "Sur un système 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 système de fichiers NFS, seul le format de quotas RPC est autorisé.\n" #: quotaio.c:84 msgid "Only XFS quota format is allowed on XFS filesystem.\n" msgstr "" "Sur un système de fichiers XFS, seul le format de quotas XFS est autorisé.\n" #: quotaio.c:95 msgid "XFS quota allowed only on XFS filesystem.\n" msgstr "Quotas XFS autorisés uniquement sur un système de fichiers XFS.\n" #: quotaio.c:109 #, fuzzy msgid "Quota not supported by the filesystem.\n" msgstr "Ce format de quotas n'est pas supporté par le noyau.\n" #: quotaio.c:129 #, fuzzy msgid "Cannot find any quota file to work on.\n" msgstr "Impossible de trouver le fichier de quotas vérifié pour %ss sur %s !\n" #: quotaio.c:134 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:144 #, fuzzy, c-format msgid "Cannot sync quotas on device %s: %s\n" msgstr "Impossible de synchroniser les quotas sur le périphérique %s : %s\n" #: quotaio.c:175 #, fuzzy, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "Impossible d'initialiser les quotas sur %s : %s\n" #: quotaio.c:202 #, c-format msgid "Creation of %s quota format is not supported.\n" msgstr "La création de quotas au format %s n'est pas supportée.\n" #: quotaio.c:212 #, c-format msgid "" "Quota on %s is stored in system files and must be manipulated by fs tools.\n" msgstr "" #: quotaio.c:222 #, fuzzy, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "Impossible de créer le nouveau fichier de quotas %s : %s\n" #: quotaio.c:296 #, 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:302 #, 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:22 msgid "Metadata init_io called when kernel support is not enabled.\n" msgstr "" #: quotaio_meta.c:26 msgid "" "Metadata init_io called when kernel does not support generic quota " "interface!\n" msgstr "" #: quotaio_rpc.c:76 quotaio_v1.c:308 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 données 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 entrée de quota déjà présente (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 décalage 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 référencé 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:214 #, 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 données : %u\n" "Entrées : %u\n" "Moyenne d'utilisation : %f\n" #: quotaio_xfs.c:217 #, c-format msgid "*** Status for %s quotas on device %s\n" msgstr "*** Statut des quotas %s sur le périphérique %s\n" #: quotaio_xfs.c:219 quotaio_xfs.c:234 msgid "ON" msgstr "ACTIVÉ" #: quotaio_xfs.c:219 quotaio_xfs.c:234 msgid "OFF" msgstr "DESACTIVÉ" #: quotaio_xfs.c:221 quotaio_xfs.c:225 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "Compte : %s ; En vigueur : %s\n" #: quotaio_xfs.c:237 quotaio_xfs.c:241 #, c-format msgid "Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n" msgstr "Compte [sur disque] : %s ; En vigueur [sur disque] : %s\n" #: quotaio_xfs.c:250 quotaio_xfs.c:259 #, c-format msgid "Inode: none\n" msgstr "Inode : aucun\n" #: quotaio_xfs.c:252 quotaio_xfs.c:261 #, fuzzy, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "Inode : #%Lu (%Lu blocs, %u étendus)\n" #: quotaon.c:66 #, c-format msgid "" "Usage:\n" "\t%s [-guvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guvp] [-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, --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:79 msgid "turn quotas off for all filesystems" msgstr "" #: quotaon.c:80 #, fuzzy msgid "turn quotas on for all filesystems" msgstr "Quotas XFS autorisés uniquement sur un système de fichiers XFS.\n" #: quotaon.c:141 #, fuzzy msgid "Cannot turn on/off quotas via RPC.\n" msgstr "Impossible d'activer/désactiver les quotas via RPC.\n" #: quotaon.c:188 #, c-format msgid "set root_squash on %s: %s\n" msgstr "Positionnez « root_squash » sur %s : %s\n" #: quotaon.c:192 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "%s : %s « root_squash » désactivé\n" #: quotaon.c:194 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "%s : %s « root_squash » activé\n" #: quotaon.c:212 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "quotactl sur %s [%s] : %s\n" #: quotaon.c:215 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "%s [%s] : quotas %s désactivés\n" #: quotaon.c:228 #, fuzzy, c-format msgid "cannot find %s on %s [%s]\n" msgstr "impossible de trouver %s sur %s [%s]\n" #: quotaon.c:230 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "utilisation de %s sur %s [%s] : %s\n" #: quotaon.c:232 msgid "Maybe create new quota files with quotacheck(8)?\n" msgstr "" "Essayez peut-être de créer un nouveau fichier de quotas avec " "quotacheck(8) ?\n" #: quotaon.c:234 msgid "Quota format not supported in kernel.\n" msgstr "Ce format de quotas n'est pas supporté par le noyau.\n" #: quotaon.c:237 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "%s [%s] : quotas %s activés\n" #: quotaon.c:277 #, fuzzy msgid "Cannot change state of GFS2 quota.\n" msgstr "Impossible d'obtenir le nom du nouveau fichier de quotas.\n" #: quotaon.c:281 #, 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:306 #, 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/" "désactiver les quotas.\n" #: quotaon.c:311 #, 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:342 #, fuzzy, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "quotactl sur %s [%s] : %s\n" #: quotaon.c:343 #, fuzzy msgid "on" msgstr "aucun" #: quotaon.c:343 msgid "off" msgstr "" #: quotaon.c:359 #, 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:365 #, 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:367 #, 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:374 #, fuzzy, c-format msgid "%s: Quota cannot be turned on on NFS filesystem\n" msgstr "Quotas XFS autorisés uniquement sur un système 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:62 quotaon_xfs.c:82 #, c-format msgid "Enabling %s quota on root filesystem (reboot to take effect)\n" msgstr "" "Activation des quotas %s sur le système de fichiers racine (redémarrez pour " "prise en compte)\n" #: quotaon_xfs.c:66 #, 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:76 #, 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:87 #, 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:90 #, fuzzy, c-format msgid "Already accounting %s quota on %s\n" msgstr "Application des quotas %s déjà sur %s\n" #: quotaon_xfs.c:95 #, 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:99 #, 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:108 #, 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:113 #, c-format msgid "Enforcing %s quota already on %s\n" msgstr "Application des quotas %s déjà sur %s\n" #: quotaon_xfs.c:118 #, 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:124 msgid "and accounting " msgstr "" #: quotaon_xfs.c:125 #, 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:131 #, c-format msgid "Unexpected XFS quota state sought on %s\n" msgstr "État des quotas XFS inattendu trouvé sur %s\n" #: quotaon_xfs.c:146 #, c-format msgid "quotactl on %s: %s\n" msgstr "quotactl sur %s : %s\n" #: quotaon_xfs.c:150 #, c-format msgid "%s: %s quotas turned off\n" msgstr "%s : quotas %s désactivés\n" #: quotaon_xfs.c:152 #, c-format msgid "%s: %s quotas turned on\n" msgstr "%s : quotas %s activés\n" #: quotaon_xfs.c:166 #, c-format msgid "Failed to delete quota: %s\n" msgstr "Échec de la suppression des quotas : %s\n" #: quotaon_xfs.c:171 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "%s : blocs des quotas %s effacés\n" #: quotaon_xfs.c:224 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "Argument incorrect « %s »\n" #: quotaops.c:108 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "%s (uid %d) : permission refusée\n" #: quotaops.c:120 #, c-format msgid "%s (gid %d): gid set allocation (%d): %s\n" msgstr "" #: quotaops.c:131 #, fuzzy, c-format msgid "%s (gid %d): error while trying getgroups(): %s\n" msgstr "Erreur lors de l'exécution de getgroups() : %s\n" #: quotaops.c:142 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "%s (gid %d) : permission refusée\n" #: quotaops.c:158 #, 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:183 #, 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:232 msgid "Too many parameters to editor.\n" msgstr "" #: quotaops.c:240 #, fuzzy, c-format msgid "Cannot exec %s\n" msgstr "Impossible d'exécuter %s\n" #: quotaops.c:259 quotaops.c:431 #, fuzzy, c-format msgid "Cannot duplicate descriptor of file to write to: %s\n" msgstr "Impossible de dupliquer le descripteur du fichier à écrire : %s\n" #: quotaops.c:261 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "Quotas disque pour %s %s (%cid %d) :\n" #: quotaops.c:265 #, c-format msgid "" " Filesystem blocks soft hard inodes " "soft hard\n" msgstr "" " Système de fichiers blocs souple stricte inodes " "souple stricte\n" #: quotaops.c:298 #, 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:301 #, 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:322 quotaops.c:473 #, fuzzy, c-format msgid "Cannot duplicate descriptor of temp file: %s\n" msgstr "Impossible de dupliquer le descripteur du fichier temporaire : %s\n" #: quotaops.c:336 #, c-format msgid "" "Bad format:\n" "%s\n" msgstr "" "Format incorrect :\n" "%s\n" #: quotaops.c:342 #, fuzzy, c-format msgid "Bad block usage: %s: %s\n" msgstr "Mauvais %s : %s\n" #: quotaops.c:349 #, fuzzy, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "limite souple bloc" #: quotaops.c:356 #, fuzzy, c-format msgid "Bad block hard limit: %s: %s\n" msgstr "limite stricte bloc" #: quotaops.c:363 #, fuzzy, c-format msgid "Bad inode usage: %s: %s\n" msgstr "Mauvais %s : %s\n" #: quotaops.c:370 #, fuzzy, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "limite souple inode" #: quotaops.c:377 #, fuzzy, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "limite stricte inode" #: quotaops.c:433 #, 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:435 quotaops.c:539 #, c-format msgid "Time units may be: days, hours, minutes, or seconds\n" msgstr "" "Unités de temps peuvent être : days (jours), hours (heures), minutes, ou " "seconds\n" #: quotaops.c:437 #, c-format msgid "" " Filesystem block grace inode grace\n" msgstr "" " Système de fichiers sursis bloc sursis " "inode\n" #: quotaops.c:442 quotaops.c:448 quotaops.c:491 quotaops.c:504 setquota.c:271 #: setquota.c:277 msgid "unset" msgstr "vide" #: quotaops.c:444 quotaops.c:450 msgid "0seconds" msgstr "0seconds" #: quotaops.c:446 quotaops.c:452 quotasys.c:364 #, c-format msgid "%useconds" msgstr "%useconds" #: quotaops.c:487 quotaops.c:587 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" "format incorrect :\n" "%s\n" #: quotaops.c:498 quotaops.c:593 #, fuzzy msgid "Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n" msgstr "" "Mauvaise unité de temps. Les unités sont « second », « minute », « hour » et " "« day ».\n" #: quotaops.c:535 #, fuzzy, c-format msgid "Cannot duplicate descriptor of file to edit: %s\n" msgstr "Impossible de dupliquer le descripteur du fichier à éditer : %s\n" #: quotaops.c:537 #, 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:540 #, c-format msgid " Filesystem Block grace period Inode grace period\n" msgstr "" " Système de fichiers période de sursis bloc période de sursis inode\n" #: quotaops.c:566 #, fuzzy, c-format msgid "Cannot reopen temp file: %s\n" msgstr "Impossible de ré-ouvrir le fichier temporaire : %s\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 récupération 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 récupération 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 requêtes 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 succès cache dquot : %ld\n" #: quotastats.c:110 #, c-format msgid "Number of allocated dquots: %ld\n" msgstr "Nombre de dquots alloués : %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'entrées dquot utilisées (utilisateur/groupe) : %ld\n" #: setquota.c:55 #, c-format msgid "" "Usage:\n" " setquota [-u|-g] %1$s[-F quotaformat] <user|group>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] <-p protouser|protogroup> <user|" "group> -a|<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] -b [-c] -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" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\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\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:72 msgid "" "-r, --remote set remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" #: setquota.c:75 msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: setquota.c:79 edquota.c:101 quota.c:111 #, c-format msgid "Bugs to: %s\n" msgstr "Rapports de bugs à : %s\n" #: setquota.c:90 #, fuzzy, c-format msgid "%s: %s\n" msgstr "Mauvais %s : %s\n" #: setquota.c:103 setquota.c:116 #, fuzzy, c-format msgid "%s: %s: %s\n" msgstr "%s (%s) %s :\n" #: setquota.c:212 #, fuzzy msgid "Group and user quotas cannot be used together.\n" msgstr "" "Les quotas groupes et utilisateurs ne peuvent pas être utilisés " "simultanément.\n" #: setquota.c:216 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:220 #, 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:224 #, 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:228 #, fuzzy msgid "Batch mode and prototype user cannot be used together.\n" msgstr "" "Les quotas groupes et utilisateurs ne peuvent pas être utilisés " "simultanément.\n" #: setquota.c:232 #, fuzzy msgid "Cannot set grace times over RPC protocol.\n" msgstr "Impossible d'écrire les temps de sursis dans le fichier.\n" #: setquota.c:255 #, fuzzy msgid "Bad block softlimit" msgstr "limite souple bloc" #: setquota.c:256 #, fuzzy msgid "Bad block hardlimit" msgstr "limite stricte bloc" #: setquota.c:257 #, fuzzy msgid "Bad inode softlimit" msgstr "limite souple inode" #: setquota.c:258 #, fuzzy msgid "Bad inode hardlimit" msgstr "limite stricte inode" #: setquota.c:264 setquota.c:276 #, fuzzy msgid "Bad block grace time" msgstr "temps de sursis bloc" #: setquota.c:265 setquota.c:282 #, fuzzy msgid "Bad inode grace time" msgstr "temps de sursis inode" #: setquota.c:288 msgid "Mountpoint not specified.\n" msgstr "Point de montage non spécifié.\n" #: setquota.c:345 #, fuzzy, c-format msgid "Line %d too long.\n" msgstr "Ligne %d trop longue. Tronquée.\n" #: setquota.c:357 #, fuzzy, c-format msgid "Cannot parse input line %d.\n" msgstr "Impossible d'ouvrir le fichier %s : %s\n" #: setquota.c:359 setquota.c:367 setquota.c:376 setquota.c:385 setquota.c:394 #: setquota.c:403 msgid "Exitting.\n" msgstr "" #: setquota.c:360 setquota.c:368 setquota.c:377 setquota.c:386 setquota.c:395 #: setquota.c:404 #, fuzzy msgid "Skipping line.\n" msgstr "Non traitement de %s [%s]\n" #: setquota.c:365 #, c-format msgid "Unable to resolve name '%s' on line %d.\n" msgstr "" #: setquota.c:373 #, c-format msgid "Unable to parse block soft limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:382 #, c-format msgid "Unable to parse block hard limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:391 #, c-format msgid "Unable to parse inode soft limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:400 #, c-format msgid "Unable to parse inode hard limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:443 #, fuzzy, c-format msgid "Setting grace period on %s is not supported.\n" msgstr "La création de quotas au format %s n'est pas supportée.\n" #: setquota.c:465 #, c-format msgid "Not setting block grace time on %s because softlimit is not exceeded.\n" msgstr "" #: setquota.c:469 #, c-format msgid "Not setting inode grace time on %s because softlimit is not exceeded.\n" msgstr "" #: setquota.c:472 #, 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 " "opération ?\n" #: quotasys.c:100 #, fuzzy, c-format msgid "user %s does not exist.\n" msgstr "L'utilisateur %s n'existe pas.\n" #: quotasys.c:129 #, fuzzy, c-format msgid "group %s does not exist.\n" msgstr "Le groupe %s n'existe pas.\n" #: quotasys.c:231 #, 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 supportés 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:258 #, 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:320 quota.c:290 msgid "none" msgstr "aucun" #: quotasys.c:352 #, c-format msgid "%ddays" msgstr "%ddays" #: quotasys.c:354 #, c-format msgid "%02d:%02d" msgstr "%02d:%02d" #: quotasys.c:366 #, c-format msgid "%uminutes" msgstr "%uminutes" #: quotasys.c:368 #, c-format msgid "%uhours" msgstr "%uhours" #: quotasys.c:370 #, c-format msgid "%udays" msgstr "%udays" #: quotasys.c:379 #, fuzzy msgid "second" msgstr "0seconds" #: quotasys.c:379 #, fuzzy msgid "seconds" msgstr "0seconds" #: quotasys.c:381 #, fuzzy msgid "minute" msgstr "%uminutes" #: quotasys.c:381 #, fuzzy msgid "minutes" msgstr "%uminutes" #: quotasys.c:383 #, fuzzy msgid "hour" msgstr "%uhours" #: quotasys.c:383 #, fuzzy msgid "hours" msgstr "%uhours" #: quotasys.c:385 #, fuzzy msgid "day" msgstr "%ddays" #: quotasys.c:385 #, fuzzy msgid "days" msgstr "%ddays" #: quotasys.c:434 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:436 msgid "K" msgstr "" #: quotasys.c:438 msgid "M" msgstr "" #: quotasys.c:440 msgid "G" msgstr "" #: quotasys.c:442 msgid "T" msgstr "" #: quotasys.c:445 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:449 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:489 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:493 msgid "k" msgstr "" #: quotasys.c:495 msgid "m" msgstr "" #: quotasys.c:497 msgid "g" msgstr "" #: quotasys.c:499 msgid "t" msgstr "" #: quotasys.c:502 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:506 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:660 #, fuzzy, c-format msgid "Cannot stat quota file %s: %s\n" msgstr "Impossible d'exécuter stat() sur le fichier de quotas %s : %s\n" #: quotasys.c:806 msgid "Not all specified mountpoints are using quota.\n" msgstr "Les points de montage spécifiés n'utilisent pas tous les quotas.\n" #: quotasys.c:820 #, c-format msgid "Error while releasing file on %s\n" msgstr "Erreur lors de la libération fichier sur %s\n" #: quotasys.c:879 #, fuzzy, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "Impossible de créer le « set » pour sigaction() : %s\n" #: quotasys.c:882 #, fuzzy, c-format msgid "Cannot set signal handler: %s\n" msgstr "Impossible de mettre en place le gestionnaire de signal : %s\n" #: quotasys.c:935 #, fuzzy, c-format msgid "Cannot reset signal handler: %s\n" msgstr "Impossible de réinitialiser le gestionnaire de signal : %s\n" #: quotasys.c:1074 #, 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:1092 #, fuzzy, c-format msgid "Cannot get device name for %s\n" msgstr "Impossible d'obtenir le nom de périphérique pour %s\n" #: quotasys.c:1151 #, fuzzy, c-format msgid "Cannot resolve mountpoint path %s: %s\n" msgstr "Impossible de résoudre le chemin du point de montage %s : %s\n" #: quotasys.c:1157 #, fuzzy, c-format msgid "Cannot statfs() %s: %s\n" msgstr "Impossible d'exécuter statfs() sur %s : %s\n" #: quotasys.c:1169 #, fuzzy, c-format msgid "Cannot stat() mounted device %s: %s\n" msgstr "Impossible d'exécuter stat() sur le périphérique monté %s : %s\n" #: quotasys.c:1174 #, fuzzy, c-format msgid "" "Device (%s) filesystem is mounted on unsupported device type. Skipping.\n" msgstr "" "Le périphérique (%s) sur lequel est monté le système de fichiers n'est pas " "un périphérique bloc ou caractère ni un montage « loopback » ou nommé. " "Rejet.\n" #: quotasys.c:1184 #, fuzzy, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "Impossible d'exécuter stat() sur le point de montage %s : %s\n" #: quotasys.c:1253 #, fuzzy, c-format msgid "" "Cannot find a device with %s.\n" "Skipping...\n" msgstr "" "Impossible de trouver dans les options le périphérique de montage de la " "loopback pour %s. Rejet.\n" #: quotasys.c:1257 #, fuzzy, c-format msgid "" "Cannot stat() a mountpoint with %s: %s\n" "Skipping...\n" msgstr "" "Impossible d'exécuter stat() sur le point de montage donné %s : %s\n" "Rejet...\n" #: quotasys.c:1265 #, fuzzy, c-format msgid "" "Cannot stat() given mountpoint %s: %s\n" "Skipping...\n" msgstr "" "Impossible d'exécuter stat() sur le point de montage donné %s : %s\n" "Rejet...\n" #: quotasys.c:1275 #, fuzzy, c-format msgid "Cannot find a filesystem mountpoint for directory %s\n" msgstr "" "Impossible de trouver le point de montage du système de fichiers pour le " "répertoire %s\n" #: quotasys.c:1281 #, fuzzy, c-format msgid "Cannot resolve path %s: %s\n" msgstr "Impossible de résoudre le chemin %s : %s\n" #: quotasys.c:1292 #, fuzzy, c-format msgid "Cannot find mountpoint for device %s\n" msgstr "Impossible de trouver le point de montage pour le périphérique %s\n" #: quotasys.c:1298 #, c-format msgid "Specified path %s is not directory nor device.\n" msgstr "Le chemin spécifié %s n'est ni un répertoire ni un périphérique.\n" #: quotasys.c:1306 msgid "No correct mountpoint specified.\n" msgstr "Aucun point de montage correct spécifié.\n" #: quotasys.c:1361 #, fuzzy, c-format msgid "Mountpoint (or device) %s not found or has no quota enabled.\n" msgstr "Point de montage (ou périphérique) %s introuvable.\n" #: rquota_svc.c:88 #, 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 démarre le service quotas en avant-plan\n" " -s --no-setquota désactive l'utilisation d'appels distants à setquota " "(défaut)\n" " -S --setquota active l'utilisation d'appels distants à setquota\n" #: rquota_svc.c:99 #, 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 démarre le service quotas en avant-plan\n" " -s --no-setquota désactive l'utilisation d'appels distants à setquota " "(défaut)\n" " -S --setquota active l'utilisation d'appels distants à setquota\n" #: rquota_svc.c:146 #, c-format msgid "Illegal port number: %s\n" msgstr "" #: rquota_svc.c:153 #, fuzzy, c-format msgid "Cannot access the specified xtab file %s: %s\n" msgstr "Impossible de créer le nouveau fichier de quotas %s : %s\n" #: rquota_svc.c:183 #, 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 désactivé\n" #: rquota_svc.c:190 #, 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:205 #, c-format msgid "Denied access to host %s\n" msgstr "Accès refusé à la machine %s\n" #: rquota_svc.c:293 rquota_svc.c:379 msgid "unable to free arguments\n" msgstr "Imposible de libérer les arguments\n" #: rquota_svc.c:402 #, c-format msgid "" "Warning: Cannot open export table %s: %s\n" "Using '/' as a pseudofilesystem root.\n" msgstr "" #: rquota_svc.c:454 msgid "cannot create udp service.\n" msgstr "Impossible de créer le service udp.\n" #: rquota_svc.c:458 #, fuzzy msgid "unable to register (RQUOTAPROG, RQUOTAVERS, UDP).\n" msgstr "Impossible d'enregistrer (RQUOTAPROG, RQUOTAVERS, udp).\n" #: rquota_svc.c:462 #, fuzzy msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n" msgstr "Impossible d'enregistrer (RQUOTAPROG, EXT_RQUOTAVERS, udp).\n" #: rquota_svc.c:469 #, fuzzy msgid "cannot create TCP service.\n" msgstr "Impossible de créer le service udp.\n" #: rquota_svc.c:473 #, fuzzy msgid "unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n" msgstr "Impossible d'enregistrer (RQUOTAPROG, RQUOTAVERS, udp).\n" #: rquota_svc.c:477 #, fuzzy msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" msgstr "Impossible d'enregistrer (RQUOTAPROG, EXT_RQUOTAVERS, udp).\n" #: rquota_svc.c:486 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 réglage 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 récupération 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 réglage 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 récupération des quotas groupe pour " "l'uid %ld : %s\n" #: svc_socket.c:42 #, c-format msgid "Cannot create socket: %s\n" msgstr "Impossible de créer la socket : %s\n" #: svc_socket.c:49 #, c-format msgid "Cannot set socket options: %s\n" msgstr "Impossible de fixer les options de la socket : %s\n" #: svc_socket.c:84 #, c-format msgid "Cannot bind to given address: %s\n" msgstr "Impossible d'exécuter bind() avec l'adresse donnée : %s\n" #: xqmstats.c:32 xqmstats.c:37 msgid "The running kernel does not support XFS\n" msgstr "Le noyau en cours d'exécution de supporte pas XFS\n" #: xqmstats.c:49 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "Statistiques dquot du gestionnaire de quotas XFS\n" #: xqmstats.c:50 #, c-format msgid " reclaims: %u\n" msgstr " demandes : %u\n" #: xqmstats.c:51 #, c-format msgid " missed reclaims: %u\n" msgstr " demandes manquées : %u\n" #: xqmstats.c:52 #, c-format msgid " dquot dups: %u\n" msgstr " dquot en double : %u\n" #: xqmstats.c:53 #, c-format msgid " cache misses: %u\n" msgstr " défaut de cache : %u\n" #: xqmstats.c:54 #, c-format msgid " cache hits: %u\n" msgstr " succès cache : %u\n" #: xqmstats.c:55 #, c-format msgid " dquot wants: %u\n" msgstr " besoins dquot : %u\n" #: xqmstats.c:56 #, c-format msgid " shake reclaims: %u\n" msgstr " demandes entamées : %u\n" #: xqmstats.c:57 #, c-format msgid " inact reclaims: %u\n" msgstr " demandes inactives : %u\n" #: xqmstats.c:62 #, 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:81 #, 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 [-u|g] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g] [-F formatname] [-f filesystem] -T username|groupname ...\n" msgstr "" #: edquota.c:85 msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" msgstr "" #: edquota.c:89 msgid "" "-r, --remote edit remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" #: edquota.c:92 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:183 #, 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:187 #, fuzzy msgid "Cannot change grace times over RPC protocol.\n" msgstr "Impossible d'écrire les temps de sursis dans le fichier.\n" #: edquota.c:205 #, 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:211 msgid "fsname mismatch\n" msgstr "Incohérence de fsname\n" #: edquota.c:255 msgid "No filesystems with quota detected.\n" msgstr "Aucun système de fichier avec quotas détecté.\n" #: edquota.c:271 #, fuzzy, c-format msgid "Cannot create temporary file: %s\n" msgstr "Impossible de ré-ouvrir le fichier temporaire : %s\n" #: edquota.c:276 #, 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:283 #, fuzzy msgid "Cannot write grace times to file.\n" msgstr "Impossible d'écrire les temps de sursis dans le fichier.\n" #: edquota.c:288 edquota.c:307 edquota.c:340 edquota.c:359 #, fuzzy msgid "Cannot stat file with times.\n" msgstr "" "Impossible d'ouvrir le fichier contenant les administrateurs de groupes : " "%s\n" #: edquota.c:294 msgid "Error while editing grace times.\n" msgstr "Erreur lors de la modification des temps de sursis.\n" #: edquota.c:305 edquota.c:357 #, fuzzy msgid "Cannot reopen!" msgstr "Impossible d'ouvrir %s : %s\n" #: edquota.c:315 msgid "Failed to parse grace times file.\n" msgstr "Échec lors de l'analyse du fichier des temps de sursis.\n" #: edquota.c:325 #, 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:328 #, 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:334 #, fuzzy msgid "Cannot write quotas to file.\n" msgstr "Impossible d'écrire les quotas dans le fichier.\n" #: edquota.c:346 msgid "Error while editing quotas.\n" msgstr "Erreur lors de la modification des quotas.\n" #: edquota.c:368 #, 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:374 #, fuzzy msgid "Cannot read quotas from file.\n" msgstr "Impossible de lire les quotas depuis le fichier.\n" #: quota.c:85 #, fuzzy msgid "Usage: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "Utilisation : quota [-guqvs] [-l | -Q] [-F format_quota]\n" #: quota.c:86 #, 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:87 #, 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:88 #, fuzzy msgid "\tquota [-qvswugQm] [-F quotaformat] -f filesystem ...\n" msgstr "\tedquota [-u|g] [-F nom_format] [-f système_fichier] -t\n" #: quota.c:89 msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable display numbers in human friendly units (MB, " "GB...)\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 " "filesystems\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:120 msgid "space" msgstr "" #: quota.c:122 msgid "blocks" msgstr "blocs" #: quota.c:124 #, 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:127 msgid "Filesystem" msgstr "Système fichiers" #: quota.c:128 quota.c:129 msgid "quota" msgstr "quota" #: quota.c:128 quota.c:129 msgid "limit" msgstr "limite" #: quota.c:128 quota.c:129 msgid "grace" msgstr "sursis" #: quota.c:129 msgid "files" msgstr "fichiers" #: quota.c:201 msgid "File limit reached on" msgstr "Limite de fichiers atteinte" #: quota.c:207 msgid "In file grace period on" msgstr "Période de sursis fichiers activée" #: quota.c:211 msgid "Over file quota on" msgstr "Quota dépassement fichiers activé" #: quota.c:217 msgid "Block limit reached on" msgstr "Limite de blocs atteinte" #: quota.c:223 msgid "In block grace period on" msgstr "Période de sursis blocs activée" #: quota.c:227 msgid "Over block quota on" msgstr "Quota dépassement blocs activé" #: quota.c:396 #, c-format msgid "Warning: Ignoring -%c when filesystem list specified.\n" msgstr "" #: quota.c:403 #, fuzzy msgid "No filesystem specified.\n" msgstr "Aucun système de fichier avec quotas détecté.\n" #: quota.c:411 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "" #: quota.c:417 #, fuzzy, c-format msgid "getgroups(): %s\n" msgstr "quota : getgroups() : %s\n" #: common.c:124 #, c-format msgid "Quota utilities version %s.\n" msgstr "Utilitaires quotas version %s.\n" #: common.c:125 #, fuzzy, c-format msgid "Compiled with:%s\n" msgstr "Compilé avec " #~ 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 " #~ "système_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 système_fichier] " #~ "groupe ...\n" #~ msgid "\tedquota [-r] [-u|g] [-F formatname] [-f filesystem] -t\n" #~ msgstr "\tedquota [-r] [-u|g] [-F nom_format] [-f système_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 système_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 " #~ "système_fichier] utilisateur ...\n" #~ msgid "" #~ "\tedquota -g [-F formatname] [-p groupname] [-f filesystem] " #~ "groupname ...\n" #~ msgstr "" #~ "\tedquota -g [-F nom_format] [-p groupe] [-f système_fichier] groupe ...\n" #~ msgid "" #~ "\tedquota [-u|g] [-F formatname] [-f filesystem] -T username|" #~ "groupname ...\n" #~ msgstr "" #~ "\tedquota [-u|g] [-F nom_format] [-f système_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 vérifier et réparer les fichiers de quotas.\n" #~ "%s [-gucfinvdmMR] [-F <format_quotas>] système_fichier|-a\n" #~ msgid "XFS quota format needs no checking.\n" #~ msgstr "Le format de quotas XFS n'a pas besoin de vérification.\n" #~ msgid "Too new quotafile format on %s\n" #~ msgstr "Format de fichier de quotas trop récent 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] systèmefichiers ...\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 utilisés :" #~ msgid "\tinodes in use:" #~ msgstr "\tinodes utilisés :" #~ 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 utilisés : %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 utilisés : %Lu, limites (souple = %Lu, stricte = %Lu)" #~ msgid "block grace period: %s, file grace period: %s\n" #~ msgstr "période de sursis bloc : %s, période de sursis fichier : %s\n" #~ msgid " block grace period: %d %s file grace period: %d %s" #~ msgstr " période de sursis bloc : %d %s période 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'exécuter stat() sur le périphérique loopback %s : %s\n" #~ msgid "Loopback device %s isn't block device!\n" #~ msgstr "" #~ "Le périphérique loopback %s n'est pas un périphérique en mode bloc !\n" #~ msgid "Can't stat() mountpoint %s: %s\n" #~ msgstr "Impossible d'exécuter 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 génération 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 démarre le service quotas en avant-plan\n" #~ msgid "cannot create tcp service.\n" #~ msgstr "impossible de créer 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|<système_fichiers>...\n" #~ " setquota [-u|-g] [-r] [-F formatquotas] <-p utilisateur_prototype|" #~ "groupe_prototype> <utilisateur|groupe> -a|<système_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] -t <sursis_bloc> <sursis_inode> -a|" #~ "<systèmes_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] <utilisateur|groupe> -T " #~ "<sursis_bloc> <sursis_inode> -a|<système_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|<système_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] <-p utilisateur_prototype|" #~ "groupe_prototype> <utilisateur|groupe> -a|<système_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] -t <sursis_bloc> <sursis_inode> -a|" #~ "<système_fichiers>...\n" #~ " setquota [-u|-g] [-F formatquotas] <utilisateur|groupe> -T " #~ "<sursis_bloc> <sursis_inode> -a|<système_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.03/po/LINGUAS�������������������������������������������������������������������������������0000644�0001750�0000144�00000000014�12437304350�011145� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cs de fr pl ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/po/Rules-quot����������������������������������������������������������������������������0000644�0001750�0000144�00000003231�12437305024�012126� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/po/fr.gmo��������������������������������������������������������������������������������0000644�0001750�0000144�00000066665�12634316466�011275� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����î������Œ��=��ü������ð��@���ñ�����2��Á��N���������¡��K���½��Y��� ��C���c�����§�����¾�����Õ�����ì���������������1�����H�����_�����e��B���l�� ���¯�� ���¹�� ���Ã�����Ñ�� ���Ø�����â����������"�����A�����_�����y�����’�����±�����Ï�����ì�����ó�� ���û�� �����&�����&���6�����]��2���f�� ���™��&���º��9���á��8�����-���T��G���‚�����Ê�����Ú��!���ô������� ���.��+���9�����e�� ���|�� ���ˆ��!���•��#���·�����Û��A���õ��.���7��9���f��&��� ��<���Ç��8�����(���=��1���f��!���˜��O���º��*��� �����5 �����N ��©���l ��V���!��.���m!��)���œ!��8���Æ!��1���ÿ!�����1"�����P"��T���o"��S���Ä"��$���#�����=#�����\#�����x#��%���‹#��.���±#�� ���à#�����î#�����$��$���"$��!���G$�����i$�����‰$��=���$��!���Û$�����ý$�����%��)���<%��!���f%�����ˆ%��9���¥%��5���ß%��!���&��0���7&��%���h&�����Ž&��"���ª&�����Í&�����Þ&�� ���ô&��L���ÿ&�����L'�����f'�����†'�����›'��#���¶'��3���Ú'�����(�����(��2���&(��‹���Y(��}���å(��n���c)��(���Ò)�����û)�����*�� ���,*��2���9*�����l*�����ƒ*�����£*�� ���¾*�����Ê*��,���é*��8���+��1���O+�����+��(���œ+��)���Å+��!���ï+��$���,��/���6,�����f,��1���z,�� ���¬,�� ���Í,�����î,����� -�����(-�����D-�����a-��1���}-�����¯-�����Ï-�����Ó-�����Ö-��4���ë-��4��� .�����U.�����i.��G���|.��2���Ä.��6���÷.��*���./��O���Y/��ƒ���©/��,���-0��&���Z0��D���0�����Æ0�����ã0�����1�����#1�����A1�����Y1��,���x1�����¥1��1���·1��X���é1��P���B2�����“2��2���¥2��;���Ø2��/���3��J���D3��(���3��4���¸3��0���í3��1���4��2���P4��2���ƒ4��(���¶4��$���ß4�����5��!���5�����<5��5���A5��5���w5��.���­5��)���Ü5��8���6��$���?6��#���d6��*���ˆ6��$���³6��X���Ø6�����17�����A7�����H7�����d7��A���x7��A���º7�����ü7�����8��$���8��%���D8�����j8��7���p8�����¨8�����¹8��5���¿8��1���õ8�����'9�����-9�����29�� ���Q9�����^9�����d9�����}9�����‘9�����§9�����Â9�����Ô9�����î9�����ô9��U�� :��E���c;��*���©;��?��Ô;��ï��>�����@��M��� @��[���n@��G���Ê@�����A�����-A�����HA�����cA�����~A�����™A�����´A�����ÏA�����êA�����ðA��E���÷A�� ���=B�� ���GB�� ���QB�����_B�� ���fB��!���qB��!���“B�����µB�����ÕB�����òB����� C��"���%C�����HC��!���hC�����ŠC�����‘C�� ���™C�� ���£C��6���­C��0���äC�����D��8���D�����WD��,���vD��M���£D��@���ñD��@���2E��e���sE�����ÙE�����ðE��,��� F�����:F�� ���SF��;���^F�����šF�����³F�����ÊF��8���ãF��1���G��#���NG��\���rG��E���ÏG��[���H��@���qH��U���²H��X���I��B���aI��@���¤I��9���åI��x���J��C���˜J��'���ÜJ��1���K����6K�����<L��B���¼L��@���ÿL��\���@M��D���M��2���âM��=���N��}���SN��y���ÑN��&���KO��2���rO��6���¥O�����ÜO��(���ïO��8���P�����QP�����fP�����„P��7���¡P��%���ÙP��.���ÿP�����.Q��]���CQ��&���¡Q��$���ÈQ��-���íQ��<���R��4���XR��+���R��S���¹R��I��� S��,���WS��B���„S��8���ÇS��(����T��8���)T�� ���bT�����ƒT�����ŸT��O���°T��1����U��-���2U�����`U�����zU��4���•U��:���ÊU�����V����� V��D��� V��§���eV��Š��� W��—���˜W��-���0X�����^X��"���~X�����¡X��9���°X�����êX��#���Y��#���)Y�� ���MY�� ���XY��@���yY��?���ºY��M���úY�����HZ��7���hZ��2��� Z��)���ÓZ��.���ýZ��A���,[�����n[��3���…[�����¹[��#���Ù[�����ý[�����\�����;\�����[\�����{\��<���™\��*���Ö\�� ���]����� ]�����]��K���.]��K���z]�����Æ]��!���å]��W���^��E���_^��Y���¥^��?���ÿ^��q���?_��¼���±_��*���n`��5���™`��c���Ï`�����3a��,���Sa��-���€a�����®a��'���Ía��*���õa��5��� b�����Vb��@���kb��t���¬b��b���!c�����„c��1���Ÿc��Q���Ñc��A���#d��b���ed��2���Èd��Q���ûd��E���Me��N���“e��O���âe��H���2f��,���{f��(���¨f�����Ñf��%���îf�� ���g��H��� g��I���ig��@���³g��F���ôg��O���;h��I���‹h��1���Õh��@���i��'���Hi��|���pi�����íi�����j��$��� j�����/j��_���Lj��Z���¬j�����k��&���k��5���7k��3���mk�����¡k��O���ªk�����úk�����l��@���l��C���Yl�����l�����¤l��%���ªl�� ���Ðl�����Ýl�����ãl�����þl�����m��(���,m�����Um��#���hm�����Œm��#���‘m������������{���Ä���a�������"���k��� ���Y���d���M�������í���t�������ˆ���Î���—�����������æ���Ç��������������Á���›���€���Ñ�������É���•���8���[�������O���<��������������Ó������¹������������������/�������×���Ý���–���ã���Þ���V���S���v���Ê���‡���,���¦���Ù�������ª������;���9���Ú���?���+���¤���^���ž���&���f���������������I�������.���0�������j���Ö���Ž���#�������3�������´��� ���¯���6���Q������Õ���š���y���ç���U���%�������®���‹�������T���â������r���™���1�������¸�������J���]��� ���n���C���b�������¿���w���\���…���ì����������N���·���A���È���Ï���$�������„���e��� �������L�������Ÿ�������Â�������³���D��������������������������²���u��������������@���œ���*���À���W���P���c����������˜���è���Í���q������ß���¾�������H���Û���-�������‰������������� ���‘���Ð���ë�������á���G�����������é���>���Š���å���o���à���`�������~�����������'���5���½����������¨�������¢���m���R���¶�������Ü���ƒ���§�������»���X�����������Å���”���F���(����������ä������������������¬�������2���z�������i���°���g���­���¥���=������Ô���s�������p���Ì���h���B���‚���x�������_�������������Ë���7���)�������E����������4���Ã���º���î���!�������±���K���£���¡�������ê�������’���«������|�����������Œ����������}���Ò���Æ�����������“���:���¼�������������������µ���������l����������Z��� ���Ø��� ���©���†���� Block limits File limits � Can open directory %s: %s � 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. � %8llu %8llu %8llu� 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 �#%-7d�%-8.8s�%-9s used soft hard grace used soft hard grace �%02d:%02d�%8llu �%d %llu %llu �%ddays�%s (%s): �%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 bind to given address: %s �Cannot change permission of %s: %s �Cannot create socket: %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 in config file (line %d), ignoring �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 �Line %d too long. Truncating. �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. �Possible error in config file (line %d), ignoring �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'. �Unterminated last line, ignoring �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. �XFS_IOC_FSBULKSTAT ioctl failed: %s �Your quota file is stored in wrong endianity. Please use convertquota(8) to convert it. �bad format: %s �blocks�cannot create udp service. �cannot open %s: %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 �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 POT-Creation-Date: 2015-12-16 18:19+0100 PO-Revision-Date: 2003-02-21 22:43+0100 Last-Translator: Jérôme 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 � Possibilité ouverture répertoire %s : %s � Veuillez faire de la place dans les données du groupe avant que la période de sursis n'expire. En clair, tout cela signifie que le système 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 période de sursis expire, le système vous empéchera, à vous ainsi qu'aux autres membres du groupe, de créer de nouveaux fichiers appartenant à ce groupe. Pour plus de renseignements, veuillez nous contacter au %s ou par téléphone au %s. � Nous espérons que vous ferez de la place avant que votre période de sursis n'expire. En clair, tout cela signifie que le système 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 période de sursis expire, le système vous empéchera de créer de nouveaux fichiers. Pour plus de renseignements, veuillez nous contacter au %s ou par téléphone au %s. � %8llu %8llu %8llu� Système de fichiers sursis bloc sursis inode � Système de fichiers blocs souple stricte inodes souple stricte � Système de fichiers période de sursis bloc période de sursis inode � succès cache : %u � défaut de cache : %u � dquot en double : %u � besoins dquot : %u � demandes inactives : %u � demandes manquées : %u � demandes : %u � demandes entamées : %u �#%-7d�%-8.8s�%-9s utilisé souple stricte sursis utilisé souple stricte sursis �%02d:%02d�%8llu �%d %llu %llu �%ddays�%s (%s) : �%s (gid %d) : permission refusée �%s (uid %d) : permission refusée �%s [%s] : quotas %s désactivés �%s [%s] : quotas %s activés �%s : quotas %s désactivés �%s : quotas %s activés �%s : %s « root_squash » désactivé �%s : %s « root_squash » activé �%s : blocs des quotas %s effacés �%udays�%uhours�%uminutes�%useconds�*** Rapport pour les quotas %s sur le périphérique %s �*** Statut des quotas %s sur le périphérique %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 mémoire alloués %d octets libérés %d octets perdus �Suivant vos désirs... Abandon de la vérification 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 références dans l'arbre pour le bloc %u�Le bloc %u est tronqué. �Bloc %u : �Période de sursis bloc : %s ; période de sursis inode : %s �Limite de blocs atteinte�Rapports de bugs à %s �Rapports de bugs à : %s �Impossible d'exécuter bind() avec l'adresse donnée : %s �Impossible de changer les permissions de %s : %s �Impossible de créer la socket : %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 vérifié pour %ss sur %s ! �Impossible de trouver le fichier de quotas sur %s [%s] pour activer/désactiver les quotas. �Impossible de terminer ES sur le nouveau fichier de quotas : %s �Impossible d'obtenir l'espace exact utilisé... Les résultats risque d'être imprécis. �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'après le nom de fichier sur %s. Veuillez préciser 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 système de fichier monté sur %s en lecture seule, les valeurs comptabilisées riquent d'être fausses. Veuillez interrompre tous les programmes qui écrivent sur ce système de fichiers ou utilisez l'option -m pour forcer la vérification. �Impossible de remonter le système de fichier monté sur %s en lecture seule. Les valeurs comptabilisées 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'exécuter stat() sur le point de montage %s : %s �Impossible de désactiver 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é. �Vérifié %d répertoires et %d fichiers �Vérification des en-têtes du fichier de quotas... �Vérification des informations du fichier de quotas... �Blocs corrompus : �Nombre d'entrées utilisées corrompu (%u)�La création de quotas au format %s n'est pas supportée. �Données déchargées. �Accès refusé à la machine %s �Format de quotas détecté %s �Suppression de la prise en compte des quotas %s sur %s �Quotas disque pour %s %s (%cid %d) : �Déchargement des données récupérées pour %ss. �Entrées redondantes.�Activation des quotas %s sur le système de fichiers racine (redémarrez pour prise en compte) �Application des quotas %s déjà sur %s �L'entrée pour l'id %u est tronquée. �Erreur vérification nom de périphérique : %s �Erreur dans le fichier de configuration (ligne %d), ignorée �Erreur lors de la modification des temps de sursis. �Erreur lors de la modification des quotas. �Erreur lors de la récupération des anciennes statistiques des quotas du noyau : %s �Erreur lors de la récupération des statistiques des quotas du noyau : %s �Erreur lors de la libération 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 terminées. �Limite de fichiers atteinte�Système fichiers�Système fichiers utilisé souple stricte sursis utilisé souple stricte sursis �Système de fichiers remonté en lecture-écriture. �Système de fichiers remonté en lecture seule �Première entrée chargée. �UUID invalide trouvé : %s �Sur le point de vérifier %s fichier de quotas de %s �Sursis avant l'application des limites souples pour %ss : �Groupe�En-têtes vérifiés. �En-têtes du fichier %s vérifiés. Chargement des données imminent... �Bonjour, Il semblerait que le groupe %s dont vous êtes membre soit en violation avec le mécanisme de quotas utilisé sur ce système. Voici les dépassements relevés : �Bonjour, Il semblerait que vous soyez en violation avec le mécanisme de quotas utilisé sur ce système. Voici les dépassements relevés : �L'ID %u possède plus de structures. Intervention de l'utilisateur nécessaire (utilisez -i pour le mode interactif ou -n pour une réponse automatique). �Référence bloc libre illégale vers le bloc %u�Période de sursis blocs activée�Période de sursis fichiers activée�Inode : aucun �Insertion d'une entrée de quota déjà présente (bloc %u). �Argument incorrect « %s » �Version quotas du noyau : %u.%u.%u �Version quotas du noyau : ancienne �Quitte %s �Ligne %d trop longue. Tronquée. �Chargement de la première entrée de quota avec temps de sursis. �Maximum %u dquots (actuellement %u inclus, %u sur liste libre) �Essayez peut-être de créer un nouveau fichier de quotas avec quotacheck(8) ? �Point de montage non spécifié. �Le nom doit être « quotaon » ou « quotaoff » et non %s �Nom du fichier de quotas trop long. Contactez %s. �Aucun point de montage correct spécifié. �Aucun système de fichier avec quotas détecté. �Les points de montage spécifiés n'utilisent pas tous les quotas. �Pas assez de mémoire. �Aucun bloc corrompu n'a été trouvé. Félicitations. �Nombre de dquots alloués : %ld �Nombre de succès cache dquot : %ld �Nombre de rejets dquot : %ld �Nombre de requêtes dquot : %ld �Nombre de lectures dquot : %ld �Nombre d'écritures dquot : %ld �Nombre de dquots libre : %ld �Nombre d'entrées dquot utilisées (utilisateur/groupe) : %ld �Nombre de synchro fichier de quotas : %ld �DESACTIVÉ�ACTIVÉ�Ancien fichier non trouvé. �Sur un système de fichiers NFS, seul le format de quotas RPC est autorisé. �Sur un système de fichiers XFS, seul le format de quotas XFS est autorisé. �Quota dépassement blocs activé�Quota dépassement fichiers activé�Erreur d'analyse à la ligne %d. Caractères parasites après le nom des administrateurs. �Erreur probable dans le fichier de configuration (ligne %d), ignorée �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 désactiver les quotas ou utiliser -f pour forcer la vérification. �Quota pour l'id %u référencé mais absent. �Ce format de quotas n'est pas supporté par le noyau. �La structure du quota comporte un décalage 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é. �Référence à un bloc illégal %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 répertoires stockés depuis la pile des répertoires �Réglage des temps de sursis et autres drapeaux aux valeurs par défaut. Considère le nombre de blocs comme étant %u. �Taille du fichier : %lu Blocs : %u Blocs libres : %u Blocs avec entrées libres : %u Drapeaux : %x �Non traitement de %s [%s] �Événement inattendu lors de l'analyse. Erreur %d �Spécification de -n et -t alors qu'un seul des deux peut être utilisé à la fois. �Le chemin spécifié %s n'est ni un répertoire ni un périphérique. �Statistiques : Total des blocs : %u Blocs de données : %u Entrées : %u Moyenne d'utilisation : %f �Le noyau en cours d'exécution de supporte pas XFS �Unités 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 exécutée. �Option non reconnue « %c ». �Dernière ligne non terminée, ignorée �Utilisateur�ATTENTION - %s : impossible de modifier l'allocation actuelle des blocs �ATTENTION - %s : impossible de modifier l'allocation actuelle des inodes �ATTENTION - Les en-têtes du fichier de quotas %s sont corrompus �ATTENTION - Les informations du fichier de quotas ont été corrompues. �ATTENTION - Certaines données risquent d'être modifiées suite à la corruption. �Attention : le client de messagerie s'est terminé de manière inattendue. �Statistiques dquot du gestionnaire de quotas XFS �Quotas XFS autorisés uniquement sur un système de fichiers XFS. �Échec de ioctl XFS_IOC_FSBULKSTAT : %s �Votre fichier de quotas est stocké avec un ordre des octets incorrect. Veuillez utiliser convertquota(8) pour le convertir. �format incorrect : %s �blocs�Impossible de créer le service udp. �Impossible d'ouvrir %s : %s �copy_user_quota_limits : échec dans la récupération des quotas utilisateur pour l'uid %ld : %s �copy_user_quota_limits : échec dans le réglage 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 démarrage de l'analyse d'inode �fichiers�find_free_dqentry() : bloc de données plein alors qu'il ne devrait pas l'être. �Incohérence 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 désactivé �limite�aucun�popd %s Entrée dans le répertoire %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 libérer les arguments �vide�utilisation de %s sur %s [%s] : %s ����������������������������������������������������������������������������quota-4.03/po/de.gmo��������������������������������������������������������������������������������0000644�0001750�0000144�00000171537�12634316466�011251� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����Â�����,��Y��<������ %��3���¡%��D���Õ%��C���&��6���^&��@���•&��\���Ö&�����3'��Á��O'����)��=���¢*�����à*��K���ü*��Y���H+��C���¢+�����æ+�����ý+�����,�����+,�����B,�����Y,�����p,�����‡,�����ž,�����¤,��B���«,�� ���î,�� ���ø,�� ���-�����-�����-�� ���-�����$-��0���D-��)���u-�����Ÿ-�����¿-�����Þ-�����ü-�����.�����.�����9.�����R.�����q.�����.�����¬.�����³.�� ���».�� ���Å.��&���Ï.��&���ö.��7��/��„���U1��€���Ú1��ä���[2�����@3��2���I3�� ���|3��&���3��9���Ä3��8���þ3��"���74��-���Z4��G���ˆ4�����Ð4�����à4��A���ú4��7���<5��3���t5�����¨5��!���®5�����Ð5�� ���è5��+���ó5�����6�� ���66�� ���B6��-���O6��5���}6��!���³6��*���Õ6��#����7��?���$7��"���d7��%���‡7��"���­7��.���Ð7��4���ÿ7��#���48�����X8��&���p8�����—8��!���±8��A���Ó8��Q���9��6���g9��0���ž9��4���Ï9��-���:�� ���2:�����S:�����c:��*���|:��5���§:��'���Ý:��.���;��M���4;��%���‚;��9���¨;��7���â;��&���<�����A<��4���R<�����‡<��<���¦<�����ã<��8���ý<�� ���6=��"���W=��(���z=��1���£=��)���Õ=��*���ÿ=��!���*>�����L>��O���h>��*���¸>��#���ã>��"���?��&���*?�����Q?��*���e?��(���?�����¹?��/���Ò?��"���@��*���%@��%���P@�����v@�����”@��/���±@��3���á@�����A��2���/A��.���bA��)���‘A��%���»A��.���áA��(���B��-���9B��*���gB�����’B�����±B��2���ÏB��G���C��©���JC��V���ôC��.���KD��)���zD�����¤D�����ÁD�� ���ÐD��&���ñD�����E��&���4E��2���[E��8���ŽE��1���ÇE�����ùE�����F��/���7F�����gF�����…F�����¤F��3���ÃF��2���÷F��$���*G�� ���OG�����pG��C���ˆG��$���ÌG��T���ñG��S���FH��#���šH�����¾H�����ÚH��"���÷H��-���I�����HI��$���hI�����I��$���«I�����ÐI�����ïI����� J��5���J�����SJ��%���fJ�����ŒJ��.���ªJ�� ���ÙJ�����çJ�����K��H���K��$���dK��'���‰K��!���±K��$���ÓK��$���øK�����L�����=L�����QL��,���oL��$���œL��=���ÁL��!���ÿL�����!M�����@M�����FM��)���fM�����M��!���°M�����ÒM��9���ïM��5���)N��*���_N��!���ŠN��0���¬N��%���ÝN�����O�� ���O�����O��6���:O��6���qO��"���¨O��2���ËO��7���þO��3���6P��6���jP�����¡P�����²P�� ���ÈP��L���ÓP����� Q�����:Q�����ZQ�����oQ�����ŠQ��_���§Q��m���R�����uR��#���’R��3���¶R�����êR��/���ðR����� S��2���2S��‹���eS��}���ñS�����oT��n���ƒT��(���òT�����U�����4U�����´U�����ÍU��G���åU�����-V��'���2V�� ���ZV��2���gV�����šV�����±V�����ÑV��i���ìV�� ���VW�����bW�����uW��,���”W��8���ÁW��1���úW��N���,X��<���{X��#���¸X��=���ÜX�����Y��(���5Y��)���^Y��!���ˆY�����ªY��$���ÄY��5���éY��/���Z�����OZ��1���cZ��F���•Z��F���ÜZ�� ���#[�� ���D[�����e[�����[�����Ÿ[�����»[�����Ø[��1���ô[�����&\�����F\�����J\��%���M\�����s\��4���ˆ\��4���½\�����ò\�����]��9���]��7���S]��G���‹]��2���Ó]��G���^��6���N^��0���…^��0���¶^��W���ç^��x���?_��*���¸_��:���ã_��O���`��ƒ���n`��,���ò`��&���a��'���Fa��S���na��D���Âa�����b�����$b�����Db��3���db�����˜b��$���¶b�����Ûb�����ób��*���c��,���=c�����jc��1���|c��X���®c��P���d�����Xd�����jd��2���zd�����­d��;���³d��/���ïd��J���e�����je��.���‚e��(���±e��4���Úe��0���f�����@f��1���`f��2���’f��2���Åf��(���øf��(���!g��$���Jg��N���og�����¾g��Ê���Ôg��!���Ÿh��û��Áh��(���½l��ì��æl��q��Ón��j��Ep��;���°q�����ìq����ñq��ß��v��N���îw��5���=x��5���sx��.���©x��N���Øx��)���'y��M���Qy��8���Ÿy�����Øy��O���ày��)���0z��6���Zz��$���‘z��1���¶z��#���èz��*��� {��$���7{��'���\{��<���„{��¥���Á{��X���g|�����À|�����Ð|�����à|�����ô|����� }�����'}�����.}�����J}�����e}��I���y}��A���Ã}��A���~�����G~�����M~��$���j~��%���~��5���µ~�����ë~�����þ~����������/��7���5�����m�����~����������¥�����»�����Ð�����å�����ë��5���€��1���;€�����m€�����s€�����x€�����|€�����€�� ���ž€�����«€�����±€�����Ê€�����Þ€�����ô€���������������'�����A�����W�����]�����v��©����3���9ƒ��F���mƒ��G���´ƒ��7���üƒ��@���4„��n���u„��!���ä„����…����#‡��=���@‰�����~‰��Q���š‰��Z���ì‰��A���GŠ�����‰Š����� Š�����·Š�����Ί�����åŠ�����üŠ�����‹�����*‹�����A‹�����G‹��B���N‹�� ���‘‹�� ���›‹�� ���¥‹�����³‹�����º‹�� ���½‹�� ���Ç‹��4���è‹��2���Œ��(���PŒ�� ���yŒ�� ���šŒ�����»Œ�����ØŒ�����àŒ�����ûŒ�� ����� ���1�����R�����r�����y�� ����� ���‹��(���•��(���¾��¯��ç��›���—�����3‘��ý���Ñ‘�����Ï’��H���Ø’��"���!“��)���D“��?���n“��@���®“��0���ï“��5��� ”��h���V”�����¿”�����Ô”��P���ó”��D���D•��E���‰•�����Ï•��*���Õ•������–�� ���–��+���(–�����T–�� ���l–�����z–��6���‰–��K���À–��?��� —��;���L—��-���ˆ—��k���¶—��*���"˜��,���M˜��)���z˜��:���¤˜��=���ߘ��*���™�����H™��/���h™��!���˜™��(���º™��N���ã™��c���2š��D���–š��F���Ûš��9���"›��C���\›��-��� ›�����Λ��!���î›��0���œ��B���Aœ��4���„œ��8���¹œ��`���òœ��0���S��H���„��E���Í��.���ž�����Bž��B���]ž��)��� ž��U���Êž��%��� Ÿ��K���FŸ��,���’Ÿ��:���¿Ÿ��C���úŸ��;���> ��7���z ��8���² ��,���ë ��*���¡��|���C¡��6���À¡��3���÷¡��,���+¢��7���X¢�����¢��8���«¢��/���ä¢�� ���£��8���5£��*���n£��;���™£��9���Õ£��%���¤��(���5¤��@���^¤��C���Ÿ¤�����ã¤��:���¥��:���=¥��9���x¥��A���²¥��3���ô¥��3���(¦��?���\¦��.���œ¦��#���˦��%���ï¦��F���§��f���\§��Ü���ç��c��� ¨��3���©��3���8©��,���l©��/���™©��-���É©��,���÷©��!���$ª��-���Fª��N���tª��I���ê��9��� «��&���G«��'���n«��X���–«��3���ï«��2���#¬��9���V¬��A���¬��A���Ò¬��7���­��1���L­��$���~­��O���£­��4���ó­��u���(®��s���ž®��+���¯��+���>¯��$���j¯��+���¯��6���»¯��'���ò¯��.���°��2���I°��)���|°��-���¦°��'���Ô°�����ü°��D���±�����T±��,���i±��%���–±��7���¼±�����ô±��"���²�����*²��b���B²��'���¥²��,���Ͳ��)���ú²��+���$³��;���P³��$���Œ³�����±³��%���ų��8���ë³��'���$´��b���L´��.���¯´��&���Þ´�����µ��*��� µ��6���7µ��,���nµ��*���›µ��#���Ƶ��<���êµ��6���'¶��0���^¶�� ���¶��4���°¶��5���å¶�����·�����+·�� ���4·��M���U·��I���£·��(���í·��;���¸��>���R¸��@���‘¸��A���Ò¸��!���¹�����6¹�� ���N¹��N���Z¹��1���©¹��'���Û¹�����º�����º�� ���:º��h���[º��s���ĺ��-���8»��#���f»��C���Š»�����λ��J���Õ»����� ¼��8���=¼�����v¼�����½�����¥½��ˆ���½½��'���F¾�����n¾��¢���‡¾�����*¿�����F¿��S���b¿�����¶¿��(���»¿�����ä¿��5���ó¿�����)À�����DÀ�����dÀ�����À�� ���ÿÀ����� Á��#���Á��0���BÁ��8���sÁ��E���¬Á��a���òÁ��Q���TÂ��%���¦Â��P���ÌÂ�� ���Ã��=���>Ã��.���|Ã��2���«Ã�����ÞÃ��4���ûÃ��7���0Ä��5���hÄ�����žÄ��2���µÄ��U���èÄ��U���>Å��.���”Å��#���ÃÅ��!���çÅ��%��� Æ��$���/Æ��'���TÆ��)���|Æ��;���¦Æ��-���âÆ�����Ç�����Ç��?���Ç�����WÇ��;���sÇ��;���¯Ç�����ëÇ�����È��B���È��E���`È��N���¦È��B���õÈ��u���8É��>���®É��4���íÉ��;���"Ê��j���^Ê�����ÉÊ��4���gË��A���œË��^���ÞË��³���=Ì��4���ñÌ��0���&Í��+���WÍ��f���ƒÍ��T���êÍ��!���?Î��*���aÎ��)���ŒÎ��I���¶Î�� ����Ï��/���!Ï�����QÏ��"���mÏ��'���Ï��=���¸Ï�����öÏ��<���Ð��d���CÐ��V���¨Ð�����ÿÐ�����Ñ��7���*Ñ�����bÑ��Y���hÑ��?���ÂÑ��\���Ò�����_Ò��Q���wÒ��+���ÉÒ��?���õÒ��K���5Ó��$���Ó��H���¦Ó��I���ïÓ��B���9Ô��-���|Ô��6���ªÔ��-���áÔ��`���Õ�����pÕ��Ó���‰Õ��?���]Ö��G��Ö��.���åÚ����Û��ƒ��.Ý��°��²Þ��@���cà�����¤à��À��­à��(��nå��e���—ç��8���ýç��8���6è��9���oè��e���©è��1���é��e���Aé��H���§é�����ðé��[���øé��2���Tê��D���‡ê��6���Ìê��2���ë��$���6ë��3���[ë��3���ë��/���Ãë��H���óë��Þ���<ì��r���í�����Ží�����Ÿí�����´í�����Èí��"���âí�����î��!��� î��!���/î�����Qî��d���lî��L���Ñî��M���ï�����lï�� ���tï��+���•ï��'���Áï��8���éï�����"ð�����6ð��"���Pð�����sð��D���{ð�����Àð�����Ýð�����îð�����ñ�����"ñ�����<ñ�� ���Vñ�����bñ��D���~ñ��F���Ãñ����� ò�����ò�����ò�����ò�����ò�� ���;ò�����Hò�����Nò�����hò�����}ò�����”ò�����²ò�����¸ò�����Ôò�����ôò�����ó�����$ó�����Bó�����}��_���õ���3��� �����/��L�����������¢���š��¯��������†��Q���i��7��j���J���¶��ž��z���„����P�������?�����I����“��u���5���`��8�����œ����·�����������t���]��������������� ��`���®���&���´���������������Ó���Ï���N�����Š��������������‰��y��� ���.�������­���W���N���ñ���I���A����������-���¸���[������—��´��'�����2�������Ö������¼���ˆ�������|��½��X��E������4��_��³��¹��\������������������Ý���ã���$��������������e������������,�������ÿ���A���[���0�������Y���Ž���"�����+���Ñ���P������Â���6������E���=���ù�������V��� ��� �����¨���z��n���m�������Á���›���*���=����������7���²���������>�������˜�������~������ ��������������¡��s�����o���J������ì���6�������ç���%���t��…���������� ��u��<��™��C��w��Z�����������–���î���c���ò�����������������¬��É�������®��p���#������������>�����¦���������í���|���B��g���ƒ���–��Ô�����������%��á���U�����b��3��±������h��Ú���¯���)��¶�������Á�����ö������������������œ��� ���D��€��@���¹���‘��p��r�������5������Œ���k�����]��”���­�� �����„�����Ž��‰���o��±���g������������;�������^�������¿���•��ý�����������T��F��M�������Ã���Š��Z��“���������������ê���Å�����������¥���Æ�����������§���j��Ù���Ì�������������ð���������������º������‘���G���R���˜��Ð�������e�����0��µ����������å���'��q�������¸������������ª���¤���¢������ ��Ø���4���-��‡���:�����º���Œ��!��£��������������¡�������#����*������2��ó���‹��ú���r������d��<���C���q�����������‚����������ï������™���9��‡������ë���©�������†������°��(���^������x��Õ���é������à�����������°���O���¦���(��Ê��� ������€���9���k���³�������È���n������¬�������i���h�����������×���v��À���…�������\��ˆ��y��s���f�����þ���!�������ª��ô���¾��Û�����������‹���M����������{��Â��©��&��Ë���a���l�������l���������m��+��w�����Ç���U��?�������»���¼��B���¾��� ��ß���«���X�����T����������� ��¿�����)�������������.����������À������d���æ���b���������f���W���������x���ž���$���}�������Q��¥��O��R��²�������½���v���›������µ�� �������Ÿ��S���Ü���Í����������ä���S��������������1������;��H���F���‚��������������Ò���/���«������Þ�������¨��â�������V���������ø���§��—���G��’��~���•���:�������¤��K���K��"���Î���H���������»����������ü�����Y������,��@������Ä���è�������’�������Ÿ�������c��·��ƒ��a��÷������������L������£���1���š�����D���{���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 ... � quota [-qvswugQm] [-F quotaformat] -f filesystem ... � Block limits File limits � -u, --user edit user data -g, --group edit group data � Can open directory %s: %s � 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 � %8llu %8llu %8llu� 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 �#%-7d�%-8.8s�%-9s used soft hard grace used soft hard grace �%02d:%02d�%8llu �%d %llu %llu �%ddays�%s�%s (%s): �%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 �-t, --edit-period edit grace period -T, --edit-times edit grace times for user/group -h, --help display this help text and exit -V, --version display version information and exit �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 bind to given address: %s �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 socket: %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 of file to edit: %s �Cannot duplicate descriptor of file to write to: %s �Cannot duplicate descriptor of temp file: %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 reopen temp file: %s �Cannot reopen!�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 in config file (line %d), ignoring �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�Group and user quotas cannot be used together. �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. �Line %d too long. Truncating. �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. �Possible error in config file (line %d), ignoring �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 �Unterminated last line, ignoring �Usage: setquota [-u|-g] %1$s[-F quotaformat] <user|group> <block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|<filesystem>... setquota [-u|-g] %1$s[-F quotaformat] <-p protouser|protogroup> <user|group> -a|<filesystem>... setquota [-u|-g] %1$s[-F quotaformat] -b [-c] -a|<filesystem>... setquota [-u|-g] [-F quotaformat] -t <blockgrace> <inodegrace> -a|<filesystem>... setquota [-u|-g] [-F quotaformat] <user|group> -T <blockgrace> <inodegrace> -a|<filesystem>... -u, --user set limits for user -g, --group set limits for group -a, --all set limits for all filesystems --always-resolve always try to resolve name, even if is composed only of digits -F, --format=formatname operate on specific quota format -p, --prototype=protoname copy limits from user/group -b, --batch read limits from standard input -c, --continue-batch continue in input processing in case of an error �Usage: %s [-acfugvViTq] [filesystem...] �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 �Usage: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat] �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. �XFS_IOC_FSBULKSTAT ioctl failed: %s �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 create udp service. �cannot find %s on %s [%s] �cannot open %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 POT-Creation-Date: 2015-12-16 18:19+0100 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 ... � quota [-qvswugQm] [-F Quotaformat] -f Dateisystem ... � Blocklimits Dateilimits � -u, --user Benutzerdaten bearbeiten -g, --group Gruppendaten bearbeiten � Kann Verzeichnis öffnen %s: %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. � 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 � %8llu %8llu %8llu� 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 �#%-7d�%-8.8s�%-9s belegt weich hart Gnade belegt weich hart Gnade �%02d:%02d�%8llu �%d %llu %llu �%ddays�%s�%s (%s): �%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 �-t, --edit-period Bearbeite Standard-Gnadenfrist -T, --edit-times Bearbeite Gnadenfristen für Benutzer/Gruppe -h, --help Zeige diese Hilfe und beende -V, --version Zeige Versionsinformationen und beende �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). �Kinnd bind-Operation zu gegebener Adresse nicht ausführen: %s �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 �Konnte Socket 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 �Kann Dateideskriptor der zu bearbeitenden Datei nicht duplizieren: %s �Kann Dateideskriptor nicht zum Schreiben duplizieren: %s �Kann Dateideskriptor einer temporären Datei nicht duplizieren: %s �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 temporäre Datei nicht neu öffnen: %s �Kann Datei nicht zum wiederholten Male öffnen!�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 in Konfigurationsdatei (Zeile %d). Ignoriere. �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�Gruppen- und Benutzerquotas können nicht gleichzeitig verändert werden. �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. �Zeile %d zu lang. Schneide sie ab. �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. �Möglicher Fehler in Konfigurationsdatei in Zeile %d. Ignoriere. �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 �Fehlendes Zeilendendezeichen in der letzten Zeile. Ignoriere. �Verwendung: setquota [-u|-g] %1$s[-F Quotaformat] <Benutzer|Gruppe> <block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|<Dateisystem>... setquota [-u|-g] %1$s[-F Quotaformat] <-p protouser|protogroup> <Benutzer|Gruppe> -a|<Dateisystem>... setquota [-u|-g] %1$s[-F Quotaformat] -b [-c] -a|<Dateisystem>... setquota [-u|-g] [-F Quotaformat] -t <blockgrace> <inodegrace> -a|<Dateisystem>... setquota [-u|-g] [-F Quotaformat] <Benutzer|Gruppe> -T <blockgrace> <inodegrace> -a|<Dateisystemsystem>... -u, --user Setze Limit für Benutzer -g, --group Setze Limits für Gruppe -a, --all Setze Limits für alle Dateisysteme --always-resolve Versuche stets einen Namen aufzulösen, auch wenn er nur aus Ziffern besteht -F, --format=Quotaformat Operiere auf einem bestimmten Quotaformat -p, --prototype=protoname Kopiere Limits von Benutzer/Gruppe -b, --batch Lese Limits von Standardeingabe -c, --continue-batch Eingabeverarbeitung auch bei Fehlern fortsetzen �Verwendung: %s [-acfugvViTq] [Dateisystem...] �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 �Verwendung: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat] �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. �XFS_IOC_FSBULKSTAT ioctl-Aufruf fehlgeschlagen: %s �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 keinen UDP-Dienst erzeugen. �Kann %s auf %s [%s] nicht finden �Kann nicht öffnen %s: %s �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.03/po/quota.pot�����������������������������������������������������������������������������0000644�0001750�0000144�00000163527�12634316466�012032� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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: 2015-12-16 18:19+0100\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:253 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "" #: bylabel.c:273 #, 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:1024 quotacheck.c:314 repquota.c:66 #: common.c:126 #, 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:81 repquota.c:148 #: quotaon.c:137 setquota.c:247 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:749 #, 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:380 msgid "Unknown action should be performed.\n" msgstr "" #: warnquota.c:56 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:58 #, 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:65 #, 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:67 #, 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:186 #, c-format msgid "ldap_initialize() failed: %s\n" msgstr "" #: warnquota.c:195 #, c-format msgid "ldap_start_tls_s() failed: %s\n" msgstr "" #: warnquota.c:201 #, c-format msgid "ldap_sasl_bind_s() failed: %s\n" msgstr "" #: warnquota.c:216 #, c-format msgid "Cannot get name for uid/gid %u.\n" msgstr "" #: warnquota.c:300 #, c-format msgid "Cannot create pipe: %s\n" msgstr "" #: warnquota.c:306 #, c-format msgid "Cannot fork: %s\n" msgstr "" #: warnquota.c:311 #, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "" #: warnquota.c:315 #, c-format msgid "Cannot execute '%s': %s\n" msgstr "" #: warnquota.c:320 #, c-format msgid "Cannot open pipe: %s\n" msgstr "" #: warnquota.c:398 msgid "Could not setup ldap connection.\n" msgstr "" #: warnquota.c:420 #, c-format msgid "Error with %s.\n" msgstr "" #: warnquota.c:421 #, c-format msgid "ldap_search_ext_s() failed: %s\n" msgstr "" #: warnquota.c:427 #, c-format msgid "Multiple entries found for client %s (%d).\n" msgstr "" #: warnquota.c:431 #, c-format msgid "Entry not found for client %s.\n" msgstr "" #: warnquota.c:441 #, c-format msgid "Could not get values for %s.\n" msgstr "" #: warnquota.c:487 #, c-format msgid "Administrator for a group %s not found. Cancelling mail.\n" msgstr "" #: warnquota.c:539 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" #: warnquota.c:540 #, c-format msgid "" "Filesystem used soft hard grace used soft hard grace\n" msgstr "" #: warnquota.c:580 #, c-format msgid "Cannot wait for mailer: %s\n" msgstr "" #: warnquota.c:582 msgid "Warning: Mailer exitted abnormally.\n" msgstr "" #: warnquota.c:639 #, c-format msgid "" "Cannot open %s: %s\n" "Will use device names.\n" msgstr "" #: warnquota.c:662 #, c-format msgid "Cannot parse line %d in quotatab (missing ':')\n" msgstr "" #: warnquota.c:676 #, c-format msgid "Cannot stat device %s (maybe typo in quotatab)\n" msgstr "" #: warnquota.c:696 #, c-format msgid "" "Incorrect format string for variable %s.\n" "Unrecognized expression %%%c.\n" msgstr "" #: warnquota.c:745 #, c-format msgid "Cannot open %s: %s\n" msgstr "" #: warnquota.c:765 #, c-format msgid "Line %d too long. Truncating.\n" msgstr "" #: warnquota.c:857 #, c-format msgid "Cannot parse time at CC_BEFORE variable (line %d).\n" msgstr "" #: warnquota.c:881 #, c-format msgid "Error in config file (line %d), ignoring\n" msgstr "" #: warnquota.c:884 #, c-format msgid "Possible error in config file (line %d), ignoring\n" msgstr "" #: warnquota.c:887 msgid "Unterminated last line, ignoring\n" msgstr "" #: warnquota.c:893 #, 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:915 #, c-format msgid "Cannot open file with group administrators: %s\n" msgstr "" #: warnquota.c:930 #, c-format msgid "Parse error at line %d. Cannot find end of group name.\n" msgstr "" #: warnquota.c:939 #, c-format msgid "Parse error at line %d. Cannot find administrators name.\n" msgstr "" #: warnquota.c:949 #, c-format msgid "" "Parse error at line %d. Trailing characters after administrators name.\n" msgstr "" #: warnquota.c:1012 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 send information in more human friendly " "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" "-h, --help display this help message and exit\n" "-v, --version display version information and exit\n" "\n" msgstr "" #: warnquota.c:1093 #, 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:426 #, c-format msgid "error (%d) while opening %s\n" msgstr "" #: quotacheck.c:431 #, c-format msgid "error (%d) while allocating file inode bitmap\n" msgstr "" #: quotacheck.c:436 #, c-format msgid "errstr (%d) while allocating directory inode bitmap\n" msgstr "" #: quotacheck.c:441 #, c-format msgid "error (%d) while opening inode scan\n" msgstr "" #: quotacheck.c:446 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "" #: quotacheck.c:454 #, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "" #: quotacheck.c:460 msgid "High uid detected.\n" msgstr "" #: quotacheck.c:476 #, c-format msgid "Something weird happened while scanning. Error %d\n" msgstr "" #: quotacheck.c:500 #, c-format msgid "Cannot stat directory %s: %s\n" msgstr "" #: quotacheck.c:512 #, c-format msgid "" "\n" "Can open directory %s: %s\n" msgstr "" #: quotacheck.c:524 #, c-format msgid "" "lstat: Cannot stat `%s/%s': %s\n" "Guess you'd better run fsck first !\n" "exiting...\n" msgstr "" #: quotacheck.c:535 #, c-format msgid "pushd %s/%s\n" msgstr "" #: quotacheck.c:551 #, c-format msgid "\tAdding %s size %lld ino %d links %d uid %u gid %u\n" msgstr "" #: quotacheck.c:561 msgid "Scanning stored directories from directory stack\n" msgstr "" #: quotacheck.c:565 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" #: quotacheck.c:577 #, c-format msgid "Leaving %s\n" msgstr "" #: quotacheck.c:617 #, c-format msgid "Going to check %s quota file of %s\n" msgstr "" #: quotacheck.c:623 #, c-format msgid "" "Quota for %ss is enabled on mountpoint %s so quotacheck might damage the " "file.\n" msgstr "" #: quotacheck.c:624 quotacheck.c:942 msgid "Should I continue?" msgstr "" #: quotacheck.c:625 quotacheck.c:943 #, c-format msgid "As you wish... Canceling check of this file.\n" msgstr "" #: quotacheck.c:630 #, 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:637 #, c-format msgid "Error while syncing quotas on %s: %s\n" msgstr "" #: quotacheck.c:642 #, c-format msgid "Cannot get quotafile name for %s\n" msgstr "" #: quotacheck.c:647 quotaio.c:150 quotasys.c:677 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "" #: quotacheck.c:687 msgid "Renaming new files to proper names.\n" msgstr "" #: quotacheck.c:689 #, c-format msgid "Cannot get name of old quotafile on %s.\n" msgstr "" #: quotacheck.c:692 msgid "Old file not found.\n" msgstr "" #: quotacheck.c:695 #, c-format msgid "Error while searching for old quota file %s: %s\n" msgstr "" #: quotacheck.c:704 msgid "Old file found removed during check!\n" msgstr "" #: quotacheck.c:707 #, c-format msgid "Error while opening old quota file %s: %s\n" msgstr "" #: quotacheck.c:713 #, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "" #: quotacheck.c:717 #, c-format msgid "Quota file %s has IMMUTABLE flag set. Clearing.\n" msgstr "" #: quotacheck.c:720 #, c-format msgid "Failed to remove IMMUTABLE flag from quota file %s: %s\n" msgstr "" #: quotacheck.c:729 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "" #: quotacheck.c:735 #, c-format msgid "Name of quota file too long. Contact %s.\n" msgstr "" #: quotacheck.c:737 #, c-format msgid "Cannot rename old quotafile %s to %s: %s\n" msgstr "" #: quotacheck.c:743 msgid "Renaming new quotafile\n" msgstr "" #: quotacheck.c:755 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "" #: quotacheck.c:762 #, c-format msgid "Cannot open new quota file %s: %s\n" msgstr "" #: quotacheck.c:767 #, c-format msgid "Warning: Cannot set EXT2 flags on %s: %s\n" msgstr "" #: quotacheck.c:787 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "" #: quotacheck.c:790 #, c-format msgid "Cannot initialize IO on xfs/gfs2 quotafile: %s\n" msgstr "" #: quotacheck.c:796 #, c-format msgid "Cannot initialize IO on new quotafile: %s\n" msgstr "" #: quotacheck.c:823 #, c-format msgid "Cannot finish IO on new quotafile: %s\n" msgstr "" #: quotacheck.c:826 msgid "Data dumped.\n" msgstr "" #: quotacheck.c:834 #, c-format msgid "Cannot find checked quota file for %ss on %s!\n" msgstr "" #: quotacheck.c:838 #, c-format msgid "" "Cannot turn %s quotas off on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" #: quotacheck.c:851 #, c-format msgid "" "Cannot turn %s quotas on on %s: %s\n" "Kernel won't know about changes quotacheck did.\n" msgstr "" #: quotacheck.c:877 #, c-format msgid "Substracting space used by old %s quota file.\n" msgstr "" #: quotacheck.c:879 #, c-format msgid "" "Old %s file name could not been determined. Usage will not be subtracted.\n" msgstr "" #: quotacheck.c:884 #, c-format msgid "Cannot stat old %s quota file %s: %s. Usage will not be subtracted.\n" msgstr "" #: quotacheck.c:896 #, c-format msgid "" "Quota structure for %s owning quota file not present! Something is really " "wrong...\n" msgstr "" #: quotacheck.c:901 #, c-format msgid "Substracted %lu bytes.\n" msgstr "" #: quotacheck.c:914 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "" #: quotacheck.c:916 #, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "" #: quotacheck.c:941 #, c-format msgid "" "Cannot remount filesystem mounted on %s read-only. Counted values might not " "be right.\n" msgstr "" #: quotacheck.c:949 #, 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:957 msgid "Filesystem remounted read-only\n" msgstr "" #: quotacheck.c:960 #, c-format msgid "Scanning %s [%s] " msgstr "" #: quotacheck.c:977 msgid "done\n" msgstr "" #: quotacheck.c:986 #, c-format msgid "Checked %d directories and %d files\n" msgstr "" #: quotacheck.c:990 #, c-format msgid "" "Cannot remount filesystem %s read-write. cannot write new quota files.\n" msgstr "" #: quotacheck.c:991 msgid "Filesystem remounted RW.\n" msgstr "" #: quotacheck.c:1034 #, c-format msgid "Cannot find quota option on filesystem %s with quotas!\n" msgstr "" #: quotacheck.c:1040 #, c-format msgid "Cannot detect quota format for journalled quota on %s\n" msgstr "" #: quotacheck.c:1106 #, c-format msgid "Cannot get system info: %s\n" msgstr "" #: quotacheck.c:1126 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:1140 quotasys.c:767 msgid "Cannot initialize mountpoint scan.\n" msgstr "" #: quotacheck.c:1145 #, c-format msgid "Skipping %s [%s]\n" msgstr "" #: quotacheck.c:1162 #, c-format msgid "" "Cannot guess format from filename on %s. Please specify format on " "commandline.\n" msgstr "" #: quotacheck.c:1167 #, c-format msgid "Detected quota format %s\n" msgstr "" #: quotacheck.c:1188 msgid "" "Cannot find filesystem to check or filesystem not mounted with quota " "option.\n" msgstr "" #: quotacheck.c:1206 #, c-format msgid "" "Allocated %d bytes memory\n" "Free'd %d bytes\n" "Lost %d bytes\n" msgstr "" #: quot.c:81 #, c-format msgid "Usage: %s [-acfugvViTq] [filesystem...]\n" msgstr "" #: quot.c:178 #, c-format msgid "%s (%s):\n" msgstr "" #: quot.c:182 quot.c:186 #, c-format msgid "%d\t%llu\t%llu\n" msgstr "" #: quot.c:195 #, c-format msgid "%s (%s) %ss:\n" msgstr "" #: quot.c:203 quot.c:205 #, c-format msgid "%8llu " msgstr "" #: quot.c:208 #, c-format msgid "%s" msgstr "" #: quot.c:210 #, c-format msgid "%-8.8s" msgstr "" #: quot.c:212 #, c-format msgid "#%-7d" msgstr "" #: quot.c:214 #, c-format msgid " %8llu %8llu %8llu" msgstr "" #: quot.c:362 #, c-format msgid "cannot open %s: %s\n" msgstr "" #: quot.c:382 #, c-format msgid "XFS_IOC_FSBULKSTAT ioctl failed: %s\n" msgstr "" #: quotasync.c:27 #, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ug] mount-point...\n" " or: %1$s [-ug] -a\n" " or: %1$s -h | -V\n" "\n" msgstr "" #: quotasync.c:34 #, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group 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:42 #, c-format msgid "Report bugs to <%s>.\n" msgstr "" #: quotasync.c:106 #, c-format msgid "%s quota sync failed: %s\n" msgstr "" #: quotasync.c:119 #, 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 "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:160 #, 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:289 #, c-format msgid "Failed to find tty of user %llu to report warning to.\n" msgstr "" #: quota_nld.c:294 #, c-format msgid "Failed to open tty %s of user %llu to report warning.\n" msgstr "" #: quota_nld.c:300 msgid "Warning" msgstr "" #: quota_nld.c:303 msgid "Error" msgstr "" #: quota_nld.c:305 msgid "Info" msgstr "" #: quota_nld.c:308 msgid "file limit reached" msgstr "" #: quota_nld.c:311 msgid "file quota exceeded too long" msgstr "" #: quota_nld.c:314 msgid "file quota exceeded" msgstr "" #: quota_nld.c:317 msgid "block limit reached" msgstr "" #: quota_nld.c:320 msgid "block quota exceeded too long" msgstr "" #: quota_nld.c:323 msgid "block quota exceeded" msgstr "" #: quota_nld.c:326 msgid "got below file limit" msgstr "" #: quota_nld.c:329 msgid "got below file quota" msgstr "" #: quota_nld.c:332 msgid "got below block limit" msgstr "" #: quota_nld.c:335 msgid "got below block quota" msgstr "" #: quota_nld.c:338 msgid "unknown quota warning" msgstr "" #: quota_nld.c:342 #, c-format msgid "Failed to write quota message for user %llu to %s: %s\n" msgstr "" #: quota_nld.c:355 msgid "Cannot create DBUS message: No enough memory.\n" msgstr "" #: quota_nld.c:373 msgid "Failed to write message to dbus: No enough memory.\n" msgstr "" #: quota_nld.c:389 #, c-format msgid "Failed to read or parse quota netlink message: %s\n" msgstr "" #: quota_nld.c:400 msgid "Undefined program name.\n" msgstr "" #: quota_nld.c:405 msgid "Not enough memory to build PID file name.\n" msgstr "" #: quota_nld.c:424 #, c-format msgid "Could not open PID file '%s': %s\n" msgstr "" #: quota_nld.c:430 #, c-format msgid "Could not write daemon's PID into '%s'.\n" msgstr "" #: quota_nld.c:437 #, c-format msgid "Could not close PID file '%s'.\n" msgstr "" #: quota_nld.c:467 msgid "Could not register PID file removal on SIGTERM.\n" msgstr "" #: quota_nld.c:469 #, c-format msgid "Could not store my PID %jd.\n" msgstr "" #: repquota.c:50 #, 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" "-s, --human-readable show numbers in human friendly units (MB, " "GB, ...)\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 " "quotas\n" "-h, --help display this help message and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: repquota.c:152 msgid "Repquota cannot report through RPC calls.\n" msgstr "" #: repquota.c:156 msgid "Specified both -n and -t but only one of them can be used.\n" msgstr "" #: repquota.c:348 msgid "User" msgstr "" #: repquota.c:350 msgid "Group" msgstr "" #: repquota.c:353 #, c-format msgid "*** Report for %s quotas on device %s\n" msgstr "" #: repquota.c:362 msgid "Space" msgstr "" #: repquota.c:364 msgid "Block" msgstr "" #: repquota.c:365 #, c-format msgid "Block grace time: %s; Inode grace time: %s\n" msgstr "" #: repquota.c:366 #, c-format msgid " %s limits File limits\n" msgstr "" #: repquota.c:367 #, 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:362 #, 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:366 msgid "Continue checking assuming version from command line?" msgstr "" #: quotacheck_v2.c:372 msgid "Headers checked.\n" msgstr "" #: quotacheck_v2.c:388 #, c-format msgid "Do not know how to buffer format %d\n" msgstr "" #: quotacheck_v2.c:398 #, c-format msgid "Headers of file %s checked. Going to load data...\n" msgstr "" #: quotacheck_v2.c:406 msgid "Cannot gather quota data. Tree root node corrupted.\n" msgstr "" #: quotacheck_v2.c:414 msgid "WARNING - Some data might be changed due to corruption.\n" msgstr "" #: quotacheck_v2.c:417 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:84 msgid "Only XFS quota format is allowed on XFS filesystem.\n" msgstr "" #: quotaio.c:95 msgid "XFS quota allowed only on XFS filesystem.\n" msgstr "" #: quotaio.c:109 msgid "Quota not supported by the filesystem.\n" msgstr "" #: quotaio.c:129 msgid "Cannot find any quota file to work on.\n" msgstr "" #: quotaio.c:134 msgid "Quota file not found or has wrong format.\n" msgstr "" #: quotaio.c:144 #, c-format msgid "Cannot sync quotas on device %s: %s\n" msgstr "" #: quotaio.c:175 #, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "" #: quotaio.c:202 #, c-format msgid "Creation of %s quota format is not supported.\n" msgstr "" #: quotaio.c:212 #, c-format msgid "" "Quota on %s is stored in system files and must be manipulated by fs tools.\n" msgstr "" #: quotaio.c:222 #, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "" #: quotaio.c:296 #, c-format msgid "" "Trying to set quota limits out of range supported by quota format on %s.\n" msgstr "" #: quotaio.c:302 #, 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:22 msgid "Metadata init_io called when kernel support is not enabled.\n" msgstr "" #: quotaio_meta.c:26 msgid "" "Metadata init_io called when kernel does not support generic quota " "interface!\n" msgstr "" #: quotaio_rpc.c:76 quotaio_v1.c:308 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:214 #, 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:217 #, c-format msgid "*** Status for %s quotas on device %s\n" msgstr "" #: quotaio_xfs.c:219 quotaio_xfs.c:234 msgid "ON" msgstr "" #: quotaio_xfs.c:219 quotaio_xfs.c:234 msgid "OFF" msgstr "" #: quotaio_xfs.c:221 quotaio_xfs.c:225 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "" #: quotaio_xfs.c:237 quotaio_xfs.c:241 #, c-format msgid "Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n" msgstr "" #: quotaio_xfs.c:250 quotaio_xfs.c:259 #, c-format msgid "Inode: none\n" msgstr "" #: quotaio_xfs.c:252 quotaio_xfs.c:261 #, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "" #: quotaon.c:66 #, c-format msgid "" "Usage:\n" "\t%s [-guvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guvp] [-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, --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:79 msgid "turn quotas off for all filesystems" msgstr "" #: quotaon.c:80 msgid "turn quotas on for all filesystems" msgstr "" #: quotaon.c:141 msgid "Cannot turn on/off quotas via RPC.\n" msgstr "" #: quotaon.c:188 #, c-format msgid "set root_squash on %s: %s\n" msgstr "" #: quotaon.c:192 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "" #: quotaon.c:194 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "" #: quotaon.c:212 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "" #: quotaon.c:215 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "" #: quotaon.c:228 #, c-format msgid "cannot find %s on %s [%s]\n" msgstr "" #: quotaon.c:230 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "" #: quotaon.c:232 msgid "Maybe create new quota files with quotacheck(8)?\n" msgstr "" #: quotaon.c:234 msgid "Quota format not supported in kernel.\n" msgstr "" #: quotaon.c:237 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "" #: quotaon.c:277 msgid "Cannot change state of GFS2 quota.\n" msgstr "" #: quotaon.c:281 msgid "Cannot change state of XFS quota. It's not compiled in kernel.\n" msgstr "" #: quotaon.c:306 #, c-format msgid "Cannot find quota file on %s [%s] to turn quotas on/off.\n" msgstr "" #: quotaon.c:311 #, c-format msgid "Quota file on %s [%s] does not exist or has wrong format.\n" msgstr "" #: quotaon.c:342 #, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "" #: quotaon.c:343 msgid "on" msgstr "" #: quotaon.c:343 msgid "off" msgstr "" #: quotaon.c:359 #, c-format msgid "Name must be quotaon or quotaoff not %s\n" msgstr "" #: quotaon.c:365 #, c-format msgid "Required format %s not supported by kernel.\n" msgstr "" #: quotaon.c:367 msgid "Warning: No quota format detected in the kernel.\n" msgstr "" #: quotaon.c:374 #, 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:62 quotaon_xfs.c:82 #, c-format msgid "Enabling %s quota on root filesystem (reboot to take effect)\n" msgstr "" #: quotaon_xfs.c:66 #, c-format msgid "Enable XFS %s quota accounting during mount\n" msgstr "" #: quotaon_xfs.c:76 #, c-format msgid "Cannot delete %s quota on %s - switch quota accounting off first\n" msgstr "" #: quotaon_xfs.c:87 #, c-format msgid "Enabling %s quota enforcement on %s\n" msgstr "" #: quotaon_xfs.c:90 #, c-format msgid "Already accounting %s quota on %s\n" msgstr "" #: quotaon_xfs.c:95 #, c-format msgid "Disabling %s quota accounting on %s\n" msgstr "" #: quotaon_xfs.c:99 #, c-format msgid "Quota enforcement already disabled for %s on %s\n" msgstr "" #: quotaon_xfs.c:108 #, c-format msgid "" "Cannot delete %s quota on %s - switch quota enforcement and accounting off " "first\n" msgstr "" #: quotaon_xfs.c:113 #, c-format msgid "Enforcing %s quota already on %s\n" msgstr "" #: quotaon_xfs.c:118 #, c-format msgid "Cannot switch off %s quota accounting on %s when enforcement is on\n" msgstr "" #: quotaon_xfs.c:124 msgid "and accounting " msgstr "" #: quotaon_xfs.c:125 #, c-format msgid "Disabling %s quota enforcement %son %s\n" msgstr "" #: quotaon_xfs.c:131 #, c-format msgid "Unexpected XFS quota state sought on %s\n" msgstr "" #: quotaon_xfs.c:146 #, c-format msgid "quotactl on %s: %s\n" msgstr "" #: quotaon_xfs.c:150 #, c-format msgid "%s: %s quotas turned off\n" msgstr "" #: quotaon_xfs.c:152 #, c-format msgid "%s: %s quotas turned on\n" msgstr "" #: quotaon_xfs.c:166 #, c-format msgid "Failed to delete quota: %s\n" msgstr "" #: quotaon_xfs.c:171 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "" #: quotaon_xfs.c:224 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "" #: quotaops.c:108 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "" #: quotaops.c:120 #, c-format msgid "%s (gid %d): gid set allocation (%d): %s\n" msgstr "" #: quotaops.c:131 #, c-format msgid "%s (gid %d): error while trying getgroups(): %s\n" msgstr "" #: quotaops.c:142 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "" #: quotaops.c:158 #, c-format msgid "error while getting quota from %s for %s (id %u): %s\n" msgstr "" #: quotaops.c:183 #, c-format msgid "Cannot write quota for %u on %s: %s\n" msgstr "" #: quotaops.c:232 msgid "Too many parameters to editor.\n" msgstr "" #: quotaops.c:240 #, c-format msgid "Cannot exec %s\n" msgstr "" #: quotaops.c:259 quotaops.c:431 #, c-format msgid "Cannot duplicate descriptor of file to write to: %s\n" msgstr "" #: quotaops.c:261 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "" #: quotaops.c:265 #, c-format msgid "" " Filesystem blocks soft hard inodes " "soft hard\n" msgstr "" #: quotaops.c:298 #, c-format msgid "WARNING - %s: cannot change current block allocation\n" msgstr "" #: quotaops.c:301 #, c-format msgid "WARNING - %s: cannot change current inode allocation\n" msgstr "" #: quotaops.c:322 quotaops.c:473 #, c-format msgid "Cannot duplicate descriptor of temp file: %s\n" msgstr "" #: quotaops.c:336 #, c-format msgid "" "Bad format:\n" "%s\n" msgstr "" #: quotaops.c:342 #, c-format msgid "Bad block usage: %s: %s\n" msgstr "" #: quotaops.c:349 #, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "" #: quotaops.c:356 #, c-format msgid "Bad block hard limit: %s: %s\n" msgstr "" #: quotaops.c:363 #, c-format msgid "Bad inode usage: %s: %s\n" msgstr "" #: quotaops.c:370 #, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "" #: quotaops.c:377 #, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "" #: quotaops.c:433 #, c-format msgid "Times to enforce softlimit for %s %s (%cid %d):\n" msgstr "" #: quotaops.c:435 quotaops.c:539 #, c-format msgid "Time units may be: days, hours, minutes, or seconds\n" msgstr "" #: quotaops.c:437 #, c-format msgid "" " Filesystem block grace inode grace\n" msgstr "" #: quotaops.c:442 quotaops.c:448 quotaops.c:491 quotaops.c:504 setquota.c:271 #: setquota.c:277 msgid "unset" msgstr "" #: quotaops.c:444 quotaops.c:450 msgid "0seconds" msgstr "" #: quotaops.c:446 quotaops.c:452 quotasys.c:364 #, c-format msgid "%useconds" msgstr "" #: quotaops.c:487 quotaops.c:587 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" #: quotaops.c:498 quotaops.c:593 msgid "Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n" msgstr "" #: quotaops.c:535 #, c-format msgid "Cannot duplicate descriptor of file to edit: %s\n" msgstr "" #: quotaops.c:537 #, c-format msgid "Grace period before enforcing soft limits for %ss:\n" msgstr "" #: quotaops.c:540 #, c-format msgid " Filesystem Block grace period Inode grace period\n" msgstr "" #: quotaops.c:566 #, c-format msgid "Cannot reopen temp file: %s\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:55 #, c-format msgid "" "Usage:\n" " setquota [-u|-g] %1$s[-F quotaformat] <user|group>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] <-p protouser|protogroup> <user|" "group> -a|<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] -b [-c] -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" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\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\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:72 msgid "" "-r, --remote set remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" #: setquota.c:75 msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group\n" "-h, --help display this help text and exit\n" "-V, --version display version information and exit\n" "\n" msgstr "" #: setquota.c:79 edquota.c:101 quota.c:111 #, c-format msgid "Bugs to: %s\n" msgstr "" #: setquota.c:90 #, c-format msgid "%s: %s\n" msgstr "" #: setquota.c:103 setquota.c:116 #, c-format msgid "%s: %s: %s\n" msgstr "" #: setquota.c:212 msgid "Group and user quotas cannot be used together.\n" msgstr "" #: setquota.c:216 msgid "Prototype user has no sense when editing grace times.\n" msgstr "" #: setquota.c:220 msgid "Cannot set both individual and global grace time.\n" msgstr "" #: setquota.c:224 msgid "Batch mode cannot be used for setting grace times.\n" msgstr "" #: setquota.c:228 msgid "Batch mode and prototype user cannot be used together.\n" msgstr "" #: setquota.c:232 msgid "Cannot set grace times over RPC protocol.\n" msgstr "" #: setquota.c:255 msgid "Bad block softlimit" msgstr "" #: setquota.c:256 msgid "Bad block hardlimit" msgstr "" #: setquota.c:257 msgid "Bad inode softlimit" msgstr "" #: setquota.c:258 msgid "Bad inode hardlimit" msgstr "" #: setquota.c:264 setquota.c:276 msgid "Bad block grace time" msgstr "" #: setquota.c:265 setquota.c:282 msgid "Bad inode grace time" msgstr "" #: setquota.c:288 msgid "Mountpoint not specified.\n" msgstr "" #: setquota.c:345 #, c-format msgid "Line %d too long.\n" msgstr "" #: setquota.c:357 #, c-format msgid "Cannot parse input line %d.\n" msgstr "" #: setquota.c:359 setquota.c:367 setquota.c:376 setquota.c:385 setquota.c:394 #: setquota.c:403 msgid "Exitting.\n" msgstr "" #: setquota.c:360 setquota.c:368 setquota.c:377 setquota.c:386 setquota.c:395 #: setquota.c:404 msgid "Skipping line.\n" msgstr "" #: setquota.c:365 #, c-format msgid "Unable to resolve name '%s' on line %d.\n" msgstr "" #: setquota.c:373 #, c-format msgid "Unable to parse block soft limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:382 #, c-format msgid "Unable to parse block hard limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:391 #, c-format msgid "Unable to parse inode soft limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:400 #, c-format msgid "Unable to parse inode hard limit '%s' on line %d: %s\n" msgstr "" #: setquota.c:443 #, c-format msgid "Setting grace period on %s is not supported.\n" msgstr "" #: setquota.c:465 #, c-format msgid "Not setting block grace time on %s because softlimit is not exceeded.\n" msgstr "" #: setquota.c:469 #, c-format msgid "Not setting inode grace time on %s because softlimit is not exceeded.\n" msgstr "" #: setquota.c:472 #, c-format msgid "" "cannot write times for %s. Maybe kernel does not support such operation?\n" msgstr "" #: quotasys.c:100 #, c-format msgid "user %s does not exist.\n" msgstr "" #: quotasys.c:129 #, c-format msgid "group %s does not exist.\n" msgstr "" #: quotasys.c:231 #, 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:258 #, 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:320 quota.c:290 msgid "none" msgstr "" #: quotasys.c:352 #, c-format msgid "%ddays" msgstr "" #: quotasys.c:354 #, c-format msgid "%02d:%02d" msgstr "" #: quotasys.c:366 #, c-format msgid "%uminutes" msgstr "" #: quotasys.c:368 #, c-format msgid "%uhours" msgstr "" #: quotasys.c:370 #, c-format msgid "%udays" msgstr "" #: quotasys.c:379 msgid "second" msgstr "" #: quotasys.c:379 msgid "seconds" msgstr "" #: quotasys.c:381 msgid "minute" msgstr "" #: quotasys.c:381 msgid "minutes" msgstr "" #: quotasys.c:383 msgid "hour" msgstr "" #: quotasys.c:383 msgid "hours" msgstr "" #: quotasys.c:385 msgid "day" msgstr "" #: quotasys.c:385 msgid "days" msgstr "" #: quotasys.c:434 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:436 msgid "K" msgstr "" #: quotasys.c:438 msgid "M" msgstr "" #: quotasys.c:440 msgid "G" msgstr "" #: quotasys.c:442 msgid "T" msgstr "" #: quotasys.c:445 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:449 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:489 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:493 msgid "k" msgstr "" #: quotasys.c:495 msgid "m" msgstr "" #: quotasys.c:497 msgid "g" msgstr "" #: quotasys.c:499 msgid "t" msgstr "" #: quotasys.c:502 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:506 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:660 #, c-format msgid "Cannot stat quota file %s: %s\n" msgstr "" #: quotasys.c:806 msgid "Not all specified mountpoints are using quota.\n" msgstr "" #: quotasys.c:820 #, c-format msgid "Error while releasing file on %s\n" msgstr "" #: quotasys.c:879 #, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "" #: quotasys.c:882 #, c-format msgid "Cannot set signal handler: %s\n" msgstr "" #: quotasys.c:935 #, c-format msgid "Cannot reset signal handler: %s\n" msgstr "" #: quotasys.c:1074 msgid "Cannot open any file with mount points.\n" msgstr "" #: quotasys.c:1092 #, c-format msgid "Cannot get device name for %s\n" msgstr "" #: quotasys.c:1151 #, c-format msgid "Cannot resolve mountpoint path %s: %s\n" msgstr "" #: quotasys.c:1157 #, c-format msgid "Cannot statfs() %s: %s\n" msgstr "" #: quotasys.c:1169 #, c-format msgid "Cannot stat() mounted device %s: %s\n" msgstr "" #: quotasys.c:1174 #, c-format msgid "" "Device (%s) filesystem is mounted on unsupported device type. Skipping.\n" msgstr "" #: quotasys.c:1184 #, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "" #: quotasys.c:1253 #, c-format msgid "" "Cannot find a device with %s.\n" "Skipping...\n" msgstr "" #: quotasys.c:1257 #, c-format msgid "" "Cannot stat() a mountpoint with %s: %s\n" "Skipping...\n" msgstr "" #: quotasys.c:1265 #, c-format msgid "" "Cannot stat() given mountpoint %s: %s\n" "Skipping...\n" msgstr "" #: quotasys.c:1275 #, c-format msgid "Cannot find a filesystem mountpoint for directory %s\n" msgstr "" #: quotasys.c:1281 #, c-format msgid "Cannot resolve path %s: %s\n" msgstr "" #: quotasys.c:1292 #, c-format msgid "Cannot find mountpoint for device %s\n" msgstr "" #: quotasys.c:1298 #, c-format msgid "Specified path %s is not directory nor device.\n" msgstr "" #: quotasys.c:1306 msgid "No correct mountpoint specified.\n" msgstr "" #: quotasys.c:1361 #, c-format msgid "Mountpoint (or device) %s not found or has no quota enabled.\n" msgstr "" #: rquota_svc.c:88 #, 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:99 #, 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:146 #, c-format msgid "Illegal port number: %s\n" msgstr "" #: rquota_svc.c:153 #, c-format msgid "Cannot access the specified xtab file %s: %s\n" msgstr "" #: rquota_svc.c:183 #, c-format msgid "host %s attempted to call setquota when disabled\n" msgstr "" #: rquota_svc.c:190 #, c-format msgid "host %s attempted to call setquota from port >= 1024\n" msgstr "" #: rquota_svc.c:205 #, c-format msgid "Denied access to host %s\n" msgstr "" #: rquota_svc.c:293 rquota_svc.c:379 msgid "unable to free arguments\n" msgstr "" #: rquota_svc.c:402 #, c-format msgid "" "Warning: Cannot open export table %s: %s\n" "Using '/' as a pseudofilesystem root.\n" msgstr "" #: rquota_svc.c:454 msgid "cannot create udp service.\n" msgstr "" #: rquota_svc.c:458 msgid "unable to register (RQUOTAPROG, RQUOTAVERS, UDP).\n" msgstr "" #: rquota_svc.c:462 msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n" msgstr "" #: rquota_svc.c:469 msgid "cannot create TCP service.\n" msgstr "" #: rquota_svc.c:473 msgid "unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n" msgstr "" #: rquota_svc.c:477 msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" msgstr "" #: rquota_svc.c:486 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:42 #, c-format msgid "Cannot create socket: %s\n" msgstr "" #: svc_socket.c:49 #, c-format msgid "Cannot set socket options: %s\n" msgstr "" #: svc_socket.c:84 #, c-format msgid "Cannot bind to given address: %s\n" msgstr "" #: xqmstats.c:32 xqmstats.c:37 msgid "The running kernel does not support XFS\n" msgstr "" #: xqmstats.c:49 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "" #: xqmstats.c:50 #, c-format msgid " reclaims: %u\n" msgstr "" #: xqmstats.c:51 #, c-format msgid " missed reclaims: %u\n" msgstr "" #: xqmstats.c:52 #, c-format msgid " dquot dups: %u\n" msgstr "" #: xqmstats.c:53 #, c-format msgid " cache misses: %u\n" msgstr "" #: xqmstats.c:54 #, c-format msgid " cache hits: %u\n" msgstr "" #: xqmstats.c:55 #, c-format msgid " dquot wants: %u\n" msgstr "" #: xqmstats.c:56 #, c-format msgid " shake reclaims: %u\n" msgstr "" #: xqmstats.c:57 #, c-format msgid " inact reclaims: %u\n" msgstr "" #: xqmstats.c:62 #, c-format msgid "Maximum %u dquots (currently %u incore, %u on freelist)\n" msgstr "" #: edquota.c:81 #, 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 [-u|g] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g] [-F formatname] [-f filesystem] -T username|groupname ...\n" msgstr "" #: edquota.c:85 msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" msgstr "" #: edquota.c:89 msgid "" "-r, --remote edit remote quota (via RPC)\n" "-m, --no-mixed-pathnames trim leading slashes from NFSv4 mountpoints\n" msgstr "" #: edquota.c:92 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:183 msgid "" "Prototype name does not make sense when editing grace period or times.\n" msgstr "" #: edquota.c:187 msgid "Cannot change grace times over RPC protocol.\n" msgstr "" #: edquota.c:205 #, c-format msgid "Cannot get quota information for user %s\n" msgstr "" #: edquota.c:211 msgid "fsname mismatch\n" msgstr "" #: edquota.c:255 msgid "No filesystems with quota detected.\n" msgstr "" #: edquota.c:271 #, c-format msgid "Cannot create temporary file: %s\n" msgstr "" #: edquota.c:276 #, c-format msgid "Cannot change owner of temporary file: %s\n" msgstr "" #: edquota.c:283 msgid "Cannot write grace times to file.\n" msgstr "" #: edquota.c:288 edquota.c:307 edquota.c:340 edquota.c:359 msgid "Cannot stat file with times.\n" msgstr "" #: edquota.c:294 msgid "Error while editing grace times.\n" msgstr "" #: edquota.c:305 edquota.c:357 msgid "Cannot reopen!" msgstr "" #: edquota.c:315 msgid "Failed to parse grace times file.\n" msgstr "" #: edquota.c:325 #, c-format msgid "Cannot get quota information for user %s.\n" msgstr "" #: edquota.c:328 msgid "Cannot write individual grace times to file.\n" msgstr "" #: edquota.c:334 msgid "Cannot write quotas to file.\n" msgstr "" #: edquota.c:346 msgid "Error while editing quotas.\n" msgstr "" #: edquota.c:368 msgid "Cannot read individual grace times from file.\n" msgstr "" #: edquota.c:374 msgid "Cannot read quotas from file.\n" msgstr "" #: quota.c:85 msgid "Usage: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "" #: quota.c:86 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ...\n" msgstr "" #: quota.c:87 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ...\n" msgstr "" #: quota.c:88 msgid "\tquota [-qvswugQm] [-F quotaformat] -f filesystem ...\n" msgstr "" #: quota.c:89 msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable display numbers in human friendly units (MB, " "GB...)\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 " "filesystems\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:120 msgid "space" msgstr "" #: quota.c:122 msgid "blocks" msgstr "" #: quota.c:124 #, c-format msgid "Disk quotas for %s %s (%cid %u): %s\n" msgstr "" #: quota.c:127 msgid "Filesystem" msgstr "" #: quota.c:128 quota.c:129 msgid "quota" msgstr "" #: quota.c:128 quota.c:129 msgid "limit" msgstr "" #: quota.c:128 quota.c:129 msgid "grace" msgstr "" #: quota.c:129 msgid "files" msgstr "" #: quota.c:201 msgid "File limit reached on" msgstr "" #: quota.c:207 msgid "In file grace period on" msgstr "" #: quota.c:211 msgid "Over file quota on" msgstr "" #: quota.c:217 msgid "Block limit reached on" msgstr "" #: quota.c:223 msgid "In block grace period on" msgstr "" #: quota.c:227 msgid "Over block quota on" msgstr "" #: quota.c:396 #, c-format msgid "Warning: Ignoring -%c when filesystem list specified.\n" msgstr "" #: quota.c:403 msgid "No filesystem specified.\n" msgstr "" #: quota.c:411 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "" #: quota.c:417 #, c-format msgid "getgroups(): %s\n" msgstr "" #: common.c:124 #, c-format msgid "Quota utilities version %s.\n" msgstr "" #: common.c:125 #, c-format msgid "Compiled with:%s\n" msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/po/de.po���������������������������������������������������������������������������������0000644�0001750�0000144�00000302715�12634316466�011077� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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: 2015-12-16 18:19+0100\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:253 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "Ungültige UUID gefunden: %s\n" #: bylabel.c:273 #, 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:1024 quotacheck.c:314 repquota.c:66 #: common.c:126 #, 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:81 repquota.c:148 #: quotaon.c:137 setquota.c:247 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:749 #, 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:380 msgid "Unknown action should be performed.\n" msgstr "Unbekannte Aktion sollte ausgeführt werden.\n" #: warnquota.c:56 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:58 #, 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:65 #, 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:67 #, 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:186 #, c-format msgid "ldap_initialize() failed: %s\n" msgstr "" #: warnquota.c:195 #, c-format msgid "ldap_start_tls_s() failed: %s\n" msgstr "" #: warnquota.c:201 #, c-format msgid "ldap_sasl_bind_s() failed: %s\n" msgstr "" #: warnquota.c:216 #, 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:300 #, c-format msgid "Cannot create pipe: %s\n" msgstr "Konnte keine Pipe erzeugen: %s\n" #: warnquota.c:306 #, c-format msgid "Cannot fork: %s\n" msgstr "fork() fehlgeschlagen: %s\n" #: warnquota.c:311 #, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "Konnte Dateideskriptor nicht duplizieren: %s\n" #: warnquota.c:315 #, c-format msgid "Cannot execute '%s': %s\n" msgstr "Konnte '%s' nicht ausführen: %s\n" #: warnquota.c:320 #, fuzzy, c-format msgid "Cannot open pipe: %s\n" msgstr "Konnte pine nicht öffnen: %s\n" #: warnquota.c:398 #, fuzzy msgid "Could not setup ldap connection.\n" msgstr "Konnte LDAP-Verbindung nicht herstellen, kehre zurück.\n" #: warnquota.c:420 #, c-format msgid "Error with %s.\n" msgstr "Fehler mit %s.\n" #: warnquota.c:421 #, c-format msgid "ldap_search_ext_s() failed: %s\n" msgstr "" #: warnquota.c:427 #, 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:431 #, 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:441 #, c-format msgid "Could not get values for %s.\n" msgstr "Konnte keine Werte für %s bekommen.\n" #: warnquota.c:487 #, 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:539 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" "\n" " Blocklimits Dateilimits\n" #: warnquota.c:540 #, 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:580 #, c-format msgid "Cannot wait for mailer: %s\n" msgstr "Kann nicht auf das Mailprogramm warten: %s\n" #: warnquota.c:582 msgid "Warning: Mailer exitted abnormally.\n" msgstr "Warnung: Mailprogramm hat sich nicht korrekt beendet.\n" #: warnquota.c:639 #, 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:662 #, c-format msgid "Cannot parse line %d in quotatab (missing ':')\n" msgstr "Kann Zeile %d in Quotatabelle nicht verarbeiten (fehlender ':')\n" #: warnquota.c:676 #, 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:696 #, 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:745 #, c-format msgid "Cannot open %s: %s\n" msgstr "Kann %s nicht öffnen: %s\n" #: warnquota.c:765 #, c-format msgid "Line %d too long. Truncating.\n" msgstr "Zeile %d zu lang. Schneide sie ab.\n" #: warnquota.c:857 #, 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:881 #, c-format msgid "Error in config file (line %d), ignoring\n" msgstr "Fehler in Konfigurationsdatei (Zeile %d). Ignoriere.\n" #: warnquota.c:884 #, c-format msgid "Possible error in config file (line %d), ignoring\n" msgstr "Möglicher Fehler in Konfigurationsdatei in Zeile %d. Ignoriere.\n" #: warnquota.c:887 msgid "Unterminated last line, ignoring\n" msgstr "Fehlendes Zeilendendezeichen in der letzten Zeile. Ignoriere.\n" #: warnquota.c:893 #, 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:915 #, c-format msgid "Cannot open file with group administrators: %s\n" msgstr "Kann Datei der Gruppenadministratoren nicht öffnen: %s\n" #: warnquota.c:930 #, 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:939 #, 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:949 #, 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:1012 #, 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 send information in more human friendly " "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" "-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:1093 #, 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:426 #, c-format msgid "error (%d) while opening %s\n" msgstr "Fehler (%d) beim Öffnen von %s\n" #: quotacheck.c:431 #, 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:436 #, 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:441 #, c-format msgid "error (%d) while opening inode scan\n" msgstr "Fehler (%d) beim Öffnen des \"Inode-Scans\"\n" #: quotacheck.c:446 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "Fehler (%d) beim Start des Inode-Scans\n" #: quotacheck.c:454 #, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "i_num %ld, Blöcke %ld gefunden\n" #: quotacheck.c:460 msgid "High uid detected.\n" msgstr "Hohe uid festgestellt.\n" #: quotacheck.c:476 #, c-format msgid "Something weird happened while scanning. Error %d\n" msgstr "Etwas seltsames ist beim Scannnen passiert. Fehler %d\n" #: quotacheck.c:500 #, c-format msgid "Cannot stat directory %s: %s\n" msgstr "Kann Verzeichnisinformationen nicht abrufen %s: %s\n" #: quotacheck.c:512 #, c-format msgid "" "\n" "Can open directory %s: %s\n" msgstr "" "\n" "Kann Verzeichnis öffnen %s: %s\n" #: quotacheck.c:524 #, 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:535 #, c-format msgid "pushd %s/%s\n" msgstr "pushd %s/%s\n" #: quotacheck.c:551 #, 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:561 msgid "Scanning stored directories from directory stack\n" msgstr "Scanne auf dem Verzeichnisstapel gespeicherte Verzeichnisse\n" #: quotacheck.c:565 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" "popd %s\n" "Entering directory %s\n" #: quotacheck.c:577 #, c-format msgid "Leaving %s\n" msgstr "Leaving %s\n" #: quotacheck.c:617 #, c-format msgid "Going to check %s quota file of %s\n" msgstr "Going to check %s quota file of %s\n" #: quotacheck.c:623 #, 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:624 quotacheck.c:942 #, fuzzy msgid "Should I continue?" msgstr "Soll ich fortsetzten" #: quotacheck.c:625 quotacheck.c:943 #, 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:630 #, 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:637 #, c-format msgid "Error while syncing quotas on %s: %s\n" msgstr "Fehler beim Syncen der Quotas auf Dateisystem %s: %s\n" #: quotacheck.c:642 #, c-format msgid "Cannot get quotafile name for %s\n" msgstr "Kann Quotadateinamen für %s nicht erhalten\n" #: quotacheck.c:647 quotaio.c:150 quotasys.c:677 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "Kann Quotadatei nicht öffnen %s: %s\n" #: quotacheck.c:687 msgid "Renaming new files to proper names.\n" msgstr "Benenne neue Dateien mit letztendlichen Namen.\n" #: quotacheck.c:689 #, 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:692 msgid "Old file not found.\n" msgstr "Alte Datei nicht gefunden.\n" #: quotacheck.c:695 #, 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:704 msgid "Old file found removed during check!\n" msgstr "Die alte gefundene Datei wurde während der Prüfung entfernt!\n" #: quotacheck.c:707 #, c-format msgid "Error while opening old quota file %s: %s\n" msgstr "Fehler beim Öffnen der alten Quotadatei %s: %s\n" #: quotacheck.c:713 #, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "EXT2_IOC_GETFLAGS fehlgeschlagen: %s\n" #: quotacheck.c:717 #, 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:720 #, 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:729 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "Benenne alte Quotadatei in %s~ um\n" #: quotacheck.c:735 #, c-format msgid "Name of quota file too long. Contact %s.\n" msgstr "Name der Quotadatei zu lang. Kontaktiere %s.\n" #: quotacheck.c:737 #, 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:743 msgid "Renaming new quotafile\n" msgstr "Benenne neue Quotadatei um\n" #: quotacheck.c:755 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "Kann Zugriffsrechte von %s nicht ändern: %s\n" #: quotacheck.c:762 #, c-format msgid "Cannot open new quota file %s: %s\n" msgstr "Kann neue Quotadatei %s nicht öffnen: %s\n" #: quotacheck.c:767 #, 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:787 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "Gebe gesammelte Daten für %ss aus.\n" #: quotacheck.c:790 #, 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:796 #, c-format msgid "Cannot initialize IO on new quotafile: %s\n" msgstr "Kann IO für neue Quotadatei nicht initialisieren: %s\n" #: quotacheck.c:823 #, c-format msgid "Cannot finish IO on new quotafile: %s\n" msgstr "Kann IO an neuer Quotadatei nicht beenden: %s\n" #: quotacheck.c:826 msgid "Data dumped.\n" msgstr "Daten ausgegeben.\n" #: quotacheck.c:834 #, 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:838 #, 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:851 #, 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:877 #, 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:879 #, 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:884 #, 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:896 #, 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:901 #, c-format msgid "Substracted %lu bytes.\n" msgstr "%lu Bytes subtrahiert.\n" #: quotacheck.c:914 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "Kann stat() für Mountpunkt %s nicht aufrufen: %s\n" #: quotacheck.c:916 #, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "Mountpunkt %s ist kein Verzeichnis?!\n" #: quotacheck.c:941 #, 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:949 #, 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:957 msgid "Filesystem remounted read-only\n" msgstr "Dateisystem als nur-lesbar umgemountet\n" #: quotacheck.c:960 #, c-format msgid "Scanning %s [%s] " msgstr "Prüfe %s [%s] " #: quotacheck.c:977 msgid "done\n" msgstr "fertig\n" #: quotacheck.c:986 #, c-format msgid "Checked %d directories and %d files\n" msgstr "%d Verzeichnisse und %d Dateien geprüft\n" #: quotacheck.c:990 #, 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:991 msgid "Filesystem remounted RW.\n" msgstr "Dateisystem als les- und schreibbar umgemountet.\n" #: quotacheck.c:1034 #, 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:1040 #, 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:1106 #, c-format msgid "Cannot get system info: %s\n" msgstr "Kann Syseminformationen nicht abrufen: %s\n" #: quotacheck.c:1126 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:1140 quotasys.c:767 msgid "Cannot initialize mountpoint scan.\n" msgstr "Kann die Mountpunkt-Prüfung nicht initialisieren.\n" #: quotacheck.c:1145 #, c-format msgid "Skipping %s [%s]\n" msgstr "Überspringe %s [%s]\n" #: quotacheck.c:1162 #, 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:1167 #, c-format msgid "Detected quota format %s\n" msgstr "Quotaformat %s erkannt\n" #: quotacheck.c:1188 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:1206 #, 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" #: quot.c:81 #, c-format msgid "Usage: %s [-acfugvViTq] [filesystem...]\n" msgstr "Verwendung: %s [-acfugvViTq] [Dateisystem...]\n" #: quot.c:178 #, c-format msgid "%s (%s):\n" msgstr "%s (%s):\n" #: quot.c:182 quot.c:186 #, c-format msgid "%d\t%llu\t%llu\n" msgstr "%d\t%llu\t%llu\n" #: quot.c:195 #, fuzzy, c-format msgid "%s (%s) %ss:\n" msgstr "%s (%s) %s:\n" #: quot.c:203 quot.c:205 #, c-format msgid "%8llu " msgstr "%8llu " #: quot.c:208 #, c-format msgid "%s" msgstr "%s" #: quot.c:210 #, c-format msgid "%-8.8s" msgstr "%-8.8s" #: quot.c:212 #, c-format msgid "#%-7d" msgstr "#%-7d" #: quot.c:214 #, c-format msgid " %8llu %8llu %8llu" msgstr " %8llu %8llu %8llu" #: quot.c:362 #, c-format msgid "cannot open %s: %s\n" msgstr "Kann nicht öffnen %s: %s\n" #: quot.c:382 #, c-format msgid "XFS_IOC_FSBULKSTAT ioctl failed: %s\n" msgstr "XFS_IOC_FSBULKSTAT ioctl-Aufruf fehlgeschlagen: %s\n" #: quotasync.c:27 #, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ug] mount-point...\n" " or: %1$s [-ug] -a\n" " or: %1$s -h | -V\n" "\n" msgstr "" #: quotasync.c:34 #, fuzzy, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group 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:42 #, fuzzy, c-format msgid "Report bugs to <%s>.\n" msgstr "Fehler an %s\n" #: quotasync.c:106 #, fuzzy, c-format msgid "%s quota sync failed: %s\n" msgstr "%s-Quota auf %s (%s) ist %s\n" #: quotasync.c:119 #, 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 "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:160 #, 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:289 #, 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:294 #, 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:300 msgid "Warning" msgstr "Warnung" #: quota_nld.c:303 msgid "Error" msgstr "Fehler" #: quota_nld.c:305 msgid "Info" msgstr "Info" #: quota_nld.c:308 msgid "file limit reached" msgstr "Dateilimit erreicht" #: quota_nld.c:311 msgid "file quota exceeded too long" msgstr "Dateiquota zu lange überschritten" #: quota_nld.c:314 msgid "file quota exceeded" msgstr "Dateiquota überschritten" #: quota_nld.c:317 msgid "block limit reached" msgstr "Blocklimit erreicht" #: quota_nld.c:320 msgid "block quota exceeded too long" msgstr "Blockquota zu lange überschritten" #: quota_nld.c:323 msgid "block quota exceeded" msgstr "Blockquota überschritten" #: quota_nld.c:326 msgid "got below file limit" msgstr "Dateilimit unterschritten" #: quota_nld.c:329 msgid "got below file quota" msgstr "Dateiquota unterschritten" #: quota_nld.c:332 msgid "got below block limit" msgstr "Blocklimit unterschritten" #: quota_nld.c:335 msgid "got below block quota" msgstr "Blockquota unterschritten" #: quota_nld.c:338 msgid "unknown quota warning" msgstr "Unbekannte Block-Quota-Warnung" #: quota_nld.c:342 #, 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:355 msgid "Cannot create DBUS message: No enough memory.\n" msgstr "Kann DBUS-Nachricht nicht erzeugen: Nicht genug Speicher.\n" #: quota_nld.c:373 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:389 #, 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:400 msgid "Undefined program name.\n" msgstr "" #: quota_nld.c:405 #, fuzzy msgid "Not enough memory to build PID file name.\n" msgstr "Nicht genug Speicher.\n" #: quota_nld.c:424 #, fuzzy, c-format msgid "Could not open PID file '%s': %s\n" msgstr "Kann Datei nicht öffnen %s: %s\n" #: quota_nld.c:430 #, 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:437 #, fuzzy, c-format msgid "Could not close PID file '%s'.\n" msgstr "Konnte keine Werte für %s bekommen.\n" #: quota_nld.c:467 msgid "Could not register PID file removal on SIGTERM.\n" msgstr "" #: quota_nld.c:469 #, c-format msgid "Could not store my PID %jd.\n" msgstr "" #: repquota.c:50 #, 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" "-s, --human-readable show numbers in human friendly units (MB, " "GB, ...)\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 " "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:152 msgid "Repquota cannot report through RPC calls.\n" msgstr "Repquota funktioniert nicht über RPC.\n" #: repquota.c:156 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:348 msgid "User" msgstr "Benutzer" #: repquota.c:350 msgid "Group" msgstr "Gruppe" #: repquota.c:353 #, c-format msgid "*** Report for %s quotas on device %s\n" msgstr "*** Report für %s Quotas auf Gerät %s\n" #: repquota.c:362 msgid "Space" msgstr "Platz" #: repquota.c:364 msgid "Block" msgstr "Block" #: repquota.c:365 #, c-format msgid "Block grace time: %s; Inode grace time: %s\n" msgstr "Blockgnadenfrist: %s; Inodegnadenfrist: %s\n" #: repquota.c:366 #, c-format msgid " %s limits File limits\n" msgstr " %s Limits Dateilimits\n" #: repquota.c:367 #, 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:362 #, 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:366 msgid "Continue checking assuming version from command line?" msgstr "Prüfung unter Annahme der Version von der Kommandozeile fortsetzen?" #: quotacheck_v2.c:372 msgid "Headers checked.\n" msgstr "Kopfinformationen geprüft.\n" #: quotacheck_v2.c:388 #, 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:398 #, 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:406 msgid "Cannot gather quota data. Tree root node corrupted.\n" msgstr "Kann Quotadaten nicht laden. Der Baumwurzelknoten ist zerstört.\n" #: quotacheck_v2.c:414 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:417 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:84 msgid "Only XFS quota format is allowed on XFS filesystem.\n" msgstr "Nur das XFS-Quotaformat ist auf XFS-Dateisystemen erlaubt.\n" #: quotaio.c:95 msgid "XFS quota allowed only on XFS filesystem.\n" msgstr "XFS-Quotaformat nur auf XFS-Dateisystemen erlaubt.\n" #: quotaio.c:109 msgid "Quota not supported by the filesystem.\n" msgstr "Das Dateisystem unterstützt keine Quotas.\n" #: quotaio.c:129 msgid "Cannot find any quota file to work on.\n" msgstr "Kann keine Quotadatei finden, um sie zu bearbeiten.\n" #: quotaio.c:134 msgid "Quota file not found or has wrong format.\n" msgstr "Quotadatei nicht gefunden oder hat falsches Format.\n" #: quotaio.c:144 #, c-format msgid "Cannot sync quotas on device %s: %s\n" msgstr "Kann Quotas auf Gerät %s nicht synchronisieren: %s\n" #: quotaio.c:175 #, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "Kann Quotas auf %s nicht initialisieren: %s\n" #: quotaio.c:202 #, c-format msgid "Creation of %s quota format is not supported.\n" msgstr "Erzeugung des %s-Quotaformats wird nicht unterstützt.\n" #: quotaio.c:212 #, c-format msgid "" "Quota on %s is stored in system files and must be manipulated by fs tools.\n" msgstr "" #: quotaio.c:222 #, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "Kann neue Quotadatei %s nicht anlegen: %s\n" #: quotaio.c:296 #, 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:302 #, 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:22 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:26 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:76 quotaio_v1.c:308 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:214 #, 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:217 #, 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:219 quotaio_xfs.c:234 msgid "ON" msgstr "AN" #: quotaio_xfs.c:219 quotaio_xfs.c:234 msgid "OFF" msgstr "AUS" #: quotaio_xfs.c:221 quotaio_xfs.c:225 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "Kontierung: %s; Vollstreckung: %s\n" #: quotaio_xfs.c:237 quotaio_xfs.c:241 #, 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:250 quotaio_xfs.c:259 #, c-format msgid "Inode: none\n" msgstr "Inode: keines\n" #: quotaio_xfs.c:252 quotaio_xfs.c:261 #, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "Inode: #%llu (%llu Blöcke, %u Extents)\n" #: quotaon.c:66 #, fuzzy, c-format msgid "" "Usage:\n" "\t%s [-guvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guvp] [-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, --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:79 msgid "turn quotas off for all filesystems" msgstr "" #: quotaon.c:80 #, fuzzy msgid "turn quotas on for all filesystems" msgstr "XFS-Quotaformat nur auf XFS-Dateisystemen erlaubt.\n" #: quotaon.c:141 msgid "Cannot turn on/off quotas via RPC.\n" msgstr "Kann Quotas via RPC nicht an-/ausschalten.\n" #: quotaon.c:188 #, c-format msgid "set root_squash on %s: %s\n" msgstr "Setze root_squash auf %s: %s\n" #: quotaon.c:192 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "%s: %s root_squash abgeschalten\n" #: quotaon.c:194 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "%s: %s root_squash angeschalten\n" #: quotaon.c:212 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "quotactl auf %s [%s]: %s\n" #: quotaon.c:215 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "%s [%s]: %s Quotas abgeschalten\n" #: quotaon.c:228 #, c-format msgid "cannot find %s on %s [%s]\n" msgstr "Kann %s auf %s [%s] nicht finden\n" #: quotaon.c:230 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "verwende %s auf %s [%s]: %s\n" #: quotaon.c:232 msgid "Maybe create new quota files with quotacheck(8)?\n" msgstr "Vielleicht sollten Sie neue Quotadateien mit quotacheck(8) erzeugen?\n" #: quotaon.c:234 msgid "Quota format not supported in kernel.\n" msgstr "Quotaformat wird vom Kernel nicht unterstützt.\n" #: quotaon.c:237 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "%s [%s]: %s Quotas angeschalten\n" #: quotaon.c:277 #, fuzzy msgid "Cannot change state of GFS2 quota.\n" msgstr "Kann Namen der Quotadatei im neuen Format nicht bekommen.\n" #: quotaon.c:281 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:306 #, 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:311 #, 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:342 #, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "%s-Quota auf %s (%s) ist %s\n" #: quotaon.c:343 msgid "on" msgstr "an" #: quotaon.c:343 msgid "off" msgstr "aus" #: quotaon.c:359 #, 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:365 #, c-format msgid "Required format %s not supported by kernel.\n" msgstr "Erforderliches Format %s wird nicht vom Kernel unterstützt.\n" #: quotaon.c:367 msgid "Warning: No quota format detected in the kernel.\n" msgstr "Warnung: Kein Quotaformat im Kernel festgestellt.\n" #: quotaon.c:374 #, 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:62 quotaon_xfs.c:82 #, 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:66 #, 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:76 #, 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:87 #, c-format msgid "Enabling %s quota enforcement on %s\n" msgstr "Aktiviere %s-Quotavollstreckung auf %s\n" #: quotaon_xfs.c:90 #, 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:95 #, c-format msgid "Disabling %s quota accounting on %s\n" msgstr "Deaktiviere %s-Quota-Kontierung auf %s\n" #: quotaon_xfs.c:99 #, 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:108 #, 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:113 #, c-format msgid "Enforcing %s quota already on %s\n" msgstr "Vollstreckung der %s-Quota schon aktiv auf %s\n" #: quotaon_xfs.c:118 #, 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:124 msgid "and accounting " msgstr "und -kontierung " #: quotaon_xfs.c:125 #, c-format msgid "Disabling %s quota enforcement %son %s\n" msgstr "Deaktiviere %s-Quota-Vollstreckung %sauf %s\n" #: quotaon_xfs.c:131 #, c-format msgid "Unexpected XFS quota state sought on %s\n" msgstr "Unerwarteter XFS-Quota-Zielzustand angefordert auf %s\n" #: quotaon_xfs.c:146 #, c-format msgid "quotactl on %s: %s\n" msgstr "quotactl auf %s: %s\n" #: quotaon_xfs.c:150 #, c-format msgid "%s: %s quotas turned off\n" msgstr "%s: %s-Quotas deaktiviert\n" #: quotaon_xfs.c:152 #, c-format msgid "%s: %s quotas turned on\n" msgstr "%s: %s-Quotas aktiv\n" #: quotaon_xfs.c:166 #, c-format msgid "Failed to delete quota: %s\n" msgstr "Konnte Quota nicht löschen: %s\n" #: quotaon_xfs.c:171 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "%s: %s-Quota-Blöcke gelöscht\n" #: quotaon_xfs.c:224 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "Ungültiges Argument \"%s\"\n" #: quotaops.c:108 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "%s (Benutzer-Id %d): Zugriff verweigert\n" #: quotaops.c:120 #, c-format msgid "%s (gid %d): gid set allocation (%d): %s\n" msgstr "%s (Gid %d): gid set Speicheranforderung (%d): %s\n" #: quotaops.c:131 #, 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:142 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "%s (Gid %d): Zugriff verweigert\n" #: quotaops.c:158 #, 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:183 #, 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:232 msgid "Too many parameters to editor.\n" msgstr "Zu viele Parameter für den Editor.\n" #: quotaops.c:240 #, c-format msgid "Cannot exec %s\n" msgstr "Kann 'exec %s nicht ausführen\n" #: quotaops.c:259 quotaops.c:431 #, c-format msgid "Cannot duplicate descriptor of file to write to: %s\n" msgstr "Kann Dateideskriptor nicht zum Schreiben duplizieren: %s\n" #: quotaops.c:261 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "Datenträgerquotas für %s %s (%cid %d):\n" #: quotaops.c:265 #, c-format msgid "" " Filesystem blocks soft hard inodes " "soft hard\n" msgstr "" " Dateisystem Blöcke weich hart Inodes " "weich hart\n" #: quotaops.c:298 #, c-format msgid "WARNING - %s: cannot change current block allocation\n" msgstr "WARNUNG - %s: Kann aktuelle Blockbelegung nicht ändern\n" #: quotaops.c:301 #, c-format msgid "WARNING - %s: cannot change current inode allocation\n" msgstr "WARNUNG - %s: Kann aktuelle Inodebelegung nicht ändern\n" #: quotaops.c:322 quotaops.c:473 #, c-format msgid "Cannot duplicate descriptor of temp file: %s\n" msgstr "Kann Dateideskriptor einer temporären Datei nicht duplizieren: %s\n" #: quotaops.c:336 #, c-format msgid "" "Bad format:\n" "%s\n" msgstr "" "Falsches Format:\n" "%s\n" #: quotaops.c:342 #, fuzzy, c-format msgid "Bad block usage: %s: %s\n" msgstr "Fehlerhafte Angabe für %s: %s\n" #: quotaops.c:349 #, fuzzy, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "weiches Blocklimit" #: quotaops.c:356 #, fuzzy, c-format msgid "Bad block hard limit: %s: %s\n" msgstr "hartes Blocklimit" #: quotaops.c:363 #, fuzzy, c-format msgid "Bad inode usage: %s: %s\n" msgstr "Fehlerhafte Angabe für %s: %s\n" #: quotaops.c:370 #, fuzzy, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "weiches Inodelimit" #: quotaops.c:377 #, fuzzy, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "hartes Inodelimit" #: quotaops.c:433 #, 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:435 quotaops.c:539 #, 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:437 #, c-format msgid "" " Filesystem block grace inode grace\n" msgstr "" " Dateisystem Blockgnadenfrist " "Inodegnadenfrist\n" #: quotaops.c:442 quotaops.c:448 quotaops.c:491 quotaops.c:504 setquota.c:271 #: setquota.c:277 msgid "unset" msgstr "nicht festgelegt" #: quotaops.c:444 quotaops.c:450 msgid "0seconds" msgstr "0seconds" #: quotaops.c:446 quotaops.c:452 quotasys.c:364 #, c-format msgid "%useconds" msgstr "%useconds" #: quotaops.c:487 quotaops.c:587 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" "falsches Format:\n" "%s\n" #: quotaops.c:498 quotaops.c:593 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:535 #, c-format msgid "Cannot duplicate descriptor of file to edit: %s\n" msgstr "" "Kann Dateideskriptor der zu bearbeitenden Datei nicht duplizieren: %s\n" #: quotaops.c:537 #, 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:540 #, c-format msgid " Filesystem Block grace period Inode grace period\n" msgstr " Dateisystem Blockgnadenfrist Inodegnadenfrist\n" #: quotaops.c:566 #, c-format msgid "Cannot reopen temp file: %s\n" msgstr "Kann temporäre Datei nicht neu öffnen: %s\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:55 #, c-format msgid "" "Usage:\n" " setquota [-u|-g] %1$s[-F quotaformat] <user|group>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] <-p protouser|protogroup> <user|" "group> -a|<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] -b [-c] -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" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\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\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:72 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:75 msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group\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:79 edquota.c:101 quota.c:111 #, c-format msgid "Bugs to: %s\n" msgstr "Fehler an: %s\n" #: setquota.c:90 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" #: setquota.c:103 setquota.c:116 #, fuzzy, c-format msgid "%s: %s: %s\n" msgstr "%s (%s) %s:\n" #: setquota.c:212 msgid "Group and user quotas cannot be used together.\n" msgstr "" "Gruppen- und Benutzerquotas können nicht gleichzeitig verändert werden.\n" #: setquota.c:216 msgid "Prototype user has no sense when editing grace times.\n" msgstr "Prototyp macht keinen Sinn beim Bearbeiten von Gnadenfristen.\n" #: setquota.c:220 msgid "Cannot set both individual and global grace time.\n" msgstr "" "Kann nicht gleichzeitig die individuelle und die Standard-Gnadenfrist " "setzen.\n" #: setquota.c:224 msgid "Batch mode cannot be used for setting grace times.\n" msgstr "Stapelmodus kann nicht verwendet werden, um Gnadenfristen zu setzen.\n" #: setquota.c:228 msgid "Batch mode and prototype user cannot be used together.\n" msgstr "Stapelmodus und Prototypen können nicht zusammen verwendet werden.\n" #: setquota.c:232 #, fuzzy msgid "Cannot set grace times over RPC protocol.\n" msgstr "Kann Gnadenfristen nicht in Datei ablegen.\n" #: setquota.c:255 #, fuzzy msgid "Bad block softlimit" msgstr "weiches Blocklimit" #: setquota.c:256 #, fuzzy msgid "Bad block hardlimit" msgstr "hartes Blocklimit" #: setquota.c:257 #, fuzzy msgid "Bad inode softlimit" msgstr "weiches Inodelimit" #: setquota.c:258 #, fuzzy msgid "Bad inode hardlimit" msgstr "hartes Inodelimit" #: setquota.c:264 setquota.c:276 #, fuzzy msgid "Bad block grace time" msgstr "Blockgnadenfrist" #: setquota.c:265 setquota.c:282 #, fuzzy msgid "Bad inode grace time" msgstr "Inodegnadenfrist" #: setquota.c:288 msgid "Mountpoint not specified.\n" msgstr "Einhängepunkt nicht angegeben.\n" #: setquota.c:345 #, c-format msgid "Line %d too long.\n" msgstr "Zeile %d zu lang.\n" #: setquota.c:357 #, c-format msgid "Cannot parse input line %d.\n" msgstr "Kann Eingabezeile %d nicht verarbeiten.\n" #: setquota.c:359 setquota.c:367 setquota.c:376 setquota.c:385 setquota.c:394 #: setquota.c:403 msgid "Exitting.\n" msgstr "Beende.\n" #: setquota.c:360 setquota.c:368 setquota.c:377 setquota.c:386 setquota.c:395 #: setquota.c:404 msgid "Skipping line.\n" msgstr "Überspringe Zeile.\n" #: setquota.c:365 #, 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:373 #, 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:382 #, 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:391 #, 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:400 #, 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:443 #, 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:465 #, 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:469 #, 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:472 #, 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:100 #, c-format msgid "user %s does not exist.\n" msgstr "Benutzer %s existiert nicht.\n" #: quotasys.c:129 #, c-format msgid "group %s does not exist.\n" msgstr "Gruppe %s existiert nicht.\n" #: quotasys.c:231 #, 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:258 #, 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:320 quota.c:290 msgid "none" msgstr "kein" #: quotasys.c:352 #, c-format msgid "%ddays" msgstr "%ddays" #: quotasys.c:354 #, c-format msgid "%02d:%02d" msgstr "%02d:%02d" #: quotasys.c:366 #, c-format msgid "%uminutes" msgstr "%uminutes" #: quotasys.c:368 #, c-format msgid "%uhours" msgstr "%uhours" #: quotasys.c:370 #, c-format msgid "%udays" msgstr "%udays" #: quotasys.c:379 #, fuzzy msgid "second" msgstr "0seconds" #: quotasys.c:379 #, fuzzy msgid "seconds" msgstr "0seconds" #: quotasys.c:381 #, fuzzy msgid "minute" msgstr "%uminutes" #: quotasys.c:381 #, fuzzy msgid "minutes" msgstr "%uminutes" #: quotasys.c:383 #, fuzzy msgid "hour" msgstr "%uhours" #: quotasys.c:383 #, fuzzy msgid "hours" msgstr "%uhours" #: quotasys.c:385 #, fuzzy msgid "day" msgstr "%ddays" #: quotasys.c:385 #, fuzzy msgid "days" msgstr "%ddays" #: quotasys.c:434 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:436 msgid "K" msgstr "" #: quotasys.c:438 msgid "M" msgstr "" #: quotasys.c:440 msgid "G" msgstr "" #: quotasys.c:442 msgid "T" msgstr "" #: quotasys.c:445 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:449 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:489 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:493 msgid "k" msgstr "" #: quotasys.c:495 msgid "m" msgstr "" #: quotasys.c:497 msgid "g" msgstr "" #: quotasys.c:499 msgid "t" msgstr "" #: quotasys.c:502 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:506 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:660 #, c-format msgid "Cannot stat quota file %s: %s\n" msgstr "Kann Informationen über Quotadatei %s nicht abrufen: %s\n" #: quotasys.c:806 msgid "Not all specified mountpoints are using quota.\n" msgstr "Nicht alle angegebenen Mountpunkte verwenden Quotas.\n" #: quotasys.c:820 #, c-format msgid "Error while releasing file on %s\n" msgstr "Fehler bei Dateifreigabe auf %s\n" #: quotasys.c:879 #, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "Kann Menge für sigaction() nicht erzeugen: %s\n" #: quotasys.c:882 #, c-format msgid "Cannot set signal handler: %s\n" msgstr "Kann Signalbehandler nicht setzen: %s\n" #: quotasys.c:935 #, c-format msgid "Cannot reset signal handler: %s\n" msgstr "Kann Signalbehandler nicht zurücksetzen: %s\n" #: quotasys.c:1074 msgid "Cannot open any file with mount points.\n" msgstr "Kann keine Datei mit Einhängepunkten öffnen.\n" #: quotasys.c:1092 #, c-format msgid "Cannot get device name for %s\n" msgstr "Kann Gerätenamen für %s nicht bekommen\n" #: quotasys.c:1151 #, c-format msgid "Cannot resolve mountpoint path %s: %s\n" msgstr "Kann Mountpunkt-Pfad %s nicht auflösen: %s\n" #: quotasys.c:1157 #, c-format msgid "Cannot statfs() %s: %s\n" msgstr "statfs() für %s fehlgeschlagen: %s\n" #: quotasys.c:1169 #, c-format msgid "Cannot stat() mounted device %s: %s\n" msgstr "stat() für eingebundenes Gerät %s fehlgeschlagen: %s\n" #: quotasys.c:1174 #, 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:1184 #, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "stat() für Einhängepunkt %s fehlgeschlagen: %s\n" #: quotasys.c:1253 #, 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:1257 #, 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:1265 #, 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:1275 #, 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:1281 #, c-format msgid "Cannot resolve path %s: %s\n" msgstr "Kann Pfad %s nicht auflösen: %s\n" #: quotasys.c:1292 #, c-format msgid "Cannot find mountpoint for device %s\n" msgstr "Kann Einhängepunkt für Gerät %s nicht finden\n" #: quotasys.c:1298 #, 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:1306 msgid "No correct mountpoint specified.\n" msgstr "Es wurde kein korrekter Einhängepunkt angegeben.\n" #: quotasys.c:1361 #, 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:88 #, 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:99 #, 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:146 #, c-format msgid "Illegal port number: %s\n" msgstr "Illegale Portnummer: %s\n" #: rquota_svc.c:153 #, 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:183 #, 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:190 #, 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:205 #, c-format msgid "Denied access to host %s\n" msgstr "Zugang verweigert für Rechner %s\n" #: rquota_svc.c:293 rquota_svc.c:379 msgid "unable to free arguments\n" msgstr "Unfähig Argumente freizugeben\n" #: rquota_svc.c:402 #, 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:454 msgid "cannot create udp service.\n" msgstr "Kann keinen UDP-Dienst erzeugen.\n" #: rquota_svc.c:458 #, fuzzy msgid "unable to register (RQUOTAPROG, RQUOTAVERS, UDP).\n" msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, RQUOTAVERS, udp).\n" #: rquota_svc.c:462 #, fuzzy msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n" msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, EXT_RQUOTAVERS, udp).\n" #: rquota_svc.c:469 #, fuzzy msgid "cannot create TCP service.\n" msgstr "Kann keinen UDP-Dienst erzeugen.\n" #: rquota_svc.c:473 #, fuzzy msgid "unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n" msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, RQUOTAVERS, udp).\n" #: rquota_svc.c:477 #, fuzzy msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" msgstr "Registrierung fehlgeschlagen (RQUOTAPROG, EXT_RQUOTAVERS, udp).\n" #: rquota_svc.c:486 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:42 #, c-format msgid "Cannot create socket: %s\n" msgstr "Konnte Socket nicht erzeugen: %s\n" #: svc_socket.c:49 #, c-format msgid "Cannot set socket options: %s\n" msgstr "Konnte Socketoptionen nicht setzen: %s\n" #: svc_socket.c:84 #, c-format msgid "Cannot bind to given 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:49 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "XFS-Quota-Manager dquot-Statistiken\n" #: xqmstats.c:50 #, c-format msgid " reclaims: %u\n" msgstr " reclaims: %u\n" #: xqmstats.c:51 #, c-format msgid " missed reclaims: %u\n" msgstr " missed reclaims: %u\n" #: xqmstats.c:52 #, c-format msgid " dquot dups: %u\n" msgstr " dquot dups: %u\n" #: xqmstats.c:53 #, c-format msgid " cache misses: %u\n" msgstr " cache misses: %u\n" #: xqmstats.c:54 #, c-format msgid " cache hits: %u\n" msgstr " cache hits: %u\n" #: xqmstats.c:55 #, c-format msgid " dquot wants: %u\n" msgstr " dquot wants: %u\n" #: xqmstats.c:56 #, c-format msgid " shake reclaims: %u\n" msgstr " shake reclaims: %u\n" #: xqmstats.c:57 #, c-format msgid " inact reclaims: %u\n" msgstr " inact reclaims: %u\n" #: xqmstats.c:62 #, 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:81 #, 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 [-u|g] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g] [-F formatname] [-f filesystem] -T username|groupname ...\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:85 msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" msgstr "" "\n" "-u, --user Benutzerdaten bearbeiten\n" "-g, --group Gruppendaten bearbeiten\n" #: edquota.c:89 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:92 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:183 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:187 #, fuzzy msgid "Cannot change grace times over RPC protocol.\n" msgstr "Kann Gnadenfristen nicht in Datei ablegen.\n" #: edquota.c:205 #, c-format msgid "Cannot get quota information for user %s\n" msgstr "Kann Quota-Informationen für Nutzer %s nicht erhalten\n" #: edquota.c:211 msgid "fsname mismatch\n" msgstr "Dateisystemname paßt nicht\n" #: edquota.c:255 msgid "No filesystems with quota detected.\n" msgstr "Keine Dateisysteme mit Quotainformationen gefunden.\n" #: edquota.c:271 #, c-format msgid "Cannot create temporary file: %s\n" msgstr "Kann temporäre Datei nicht anlegen: %s\n" #: edquota.c:276 #, 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:283 msgid "Cannot write grace times to file.\n" msgstr "Kann Gnadenfristen nicht in Datei ablegen.\n" #: edquota.c:288 edquota.c:307 edquota.c:340 edquota.c:359 #, fuzzy msgid "Cannot stat file with times.\n" msgstr "Kann keine Datei mit Einhängepunkten öffnen.\n" #: edquota.c:294 msgid "Error while editing grace times.\n" msgstr "Fehler beim Bearbeiten von Gnadenfristen.\n" #: edquota.c:305 edquota.c:357 msgid "Cannot reopen!" msgstr "Kann Datei nicht zum wiederholten Male öffnen!" #: edquota.c:315 msgid "Failed to parse grace times file.\n" msgstr "Konnte Gnadenfristendatei nicht parsen.\n" #: edquota.c:325 #, c-format msgid "Cannot get quota information for user %s.\n" msgstr "Kann Quota-Informationen für Nutzer %s nicht erhalten.\n" #: edquota.c:328 msgid "Cannot write individual grace times to file.\n" msgstr "Kann einzelne Gnadenfristen nicht in Datei schreiben.\n" #: edquota.c:334 msgid "Cannot write quotas to file.\n" msgstr "Kann Quotainformationen nicht in Datei schreiben.\n" #: edquota.c:346 msgid "Error while editing quotas.\n" msgstr "Fehler beim Bearbeiten von Quotas.\n" #: edquota.c:368 msgid "Cannot read individual grace times from file.\n" msgstr "Kann einzelne Gnadenfristen nicht aus Datei lesen.\n" #: edquota.c:374 msgid "Cannot read quotas from file.\n" msgstr "Kann Quotas nicht aus Datei lesen.\n" #: quota.c:85 msgid "Usage: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "Verwendung: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" #: quota.c:86 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -u username ...\n" msgstr "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F Quotaformat] -u Benutzername ...\n" #: quota.c:87 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ...\n" msgstr "" "\tquota [-qvswim] [-l | [-Q | -A]] [-F Quotaformat] -g Gruppenname ...\n" #: quota.c:88 msgid "\tquota [-qvswugQm] [-F quotaformat] -f filesystem ...\n" msgstr "\tquota [-qvswugQm] [-F Quotaformat] -f Dateisystem ...\n" #: quota.c:89 #, fuzzy msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable display numbers in human friendly units (MB, " "GB...)\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 " "filesystems\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:120 msgid "space" msgstr "Platz" #: quota.c:122 msgid "blocks" msgstr "Blöcke" #: quota.c:124 #, c-format msgid "Disk quotas for %s %s (%cid %u): %s\n" msgstr "Dateisystemquotas für %s %s (%cid %u): %s\n" #: quota.c:127 msgid "Filesystem" msgstr "Dateisystem" #: quota.c:128 quota.c:129 msgid "quota" msgstr "Quota" #: quota.c:128 quota.c:129 msgid "limit" msgstr "Limit" #: quota.c:128 quota.c:129 msgid "grace" msgstr "Gnadenfrist" #: quota.c:129 msgid "files" msgstr "Dateien" #: quota.c:201 msgid "File limit reached on" msgstr "Dateilimit erreicht auf" #: quota.c:207 msgid "In file grace period on" msgstr "In der Dateignadenfrist auf" #: quota.c:211 msgid "Over file quota on" msgstr "Über dem Dateiquota auf" #: quota.c:217 msgid "Block limit reached on" msgstr "Blocklimit erreicht auf" #: quota.c:223 msgid "In block grace period on" msgstr "In der Blockgnadenfrist auf" #: quota.c:227 msgid "Over block quota on" msgstr "Über dem Blockquota auf" #: quota.c:396 #, c-format msgid "Warning: Ignoring -%c when filesystem list specified.\n" msgstr "Warnung: Ignoriere -%c, wenn eine Dateisystemliste angegeben wurde.\n" #: quota.c:403 msgid "No filesystem specified.\n" msgstr "Kein Dateisystem angegeben.\n" #: quota.c:411 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "Gid-set-Speicheranforderung (ngroups=%d): %s\n" #: quota.c:417 #, c-format msgid "getgroups(): %s\n" msgstr "getgroups(): %s\n" #: common.c:124 #, c-format msgid "Quota utilities version %s.\n" msgstr "Quota-Hilfsprogramme Version %s.\n" #: common.c:125 #, c-format msgid "Compiled with:%s\n" msgstr "Compiliert mit:%s\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.03/po/cs.gmo��������������������������������������������������������������������������������0000644�0001750�0000144�00000212762�12634316466�011262� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����û�����ô��¥��Ì������`*��3���a*��D���•*��C���Ú*��6���+��@���U+��\���–+�����ó+��Á��,����Ñ-��=���b/����� /��K���¼/��Y���0��C���b0�����¦0�����½0�����Ô0�����ë0�����1�����1�����01�����G1�����^1�����d1��B���k1�� ���®1�� ���¸1�� ���Â1�����Ð1�����×1�� ���Ú1�� ���è1�����ò1��0���2��)���C2�����m2�����2�����¬2�����Ê2�� ���å2�����3����� 3�����(3�����B3�����[3�����z3��0���˜3�����É3�����æ3�����í3�� ���õ3�� ���ÿ3��&��� 4��&���04��7��W4��„���6��€���7��ä���•7�����z8��2���ƒ8�� ���¶8��&���×8�����þ8��9���9��8���X9��"���‘9��-���´9�����â9�����÷9����� :��G���:�����g:�����w:�����Œ:����� :�����´:��A���Î:��7���;��3���H;�����|;��!���‚;�����¤;�� ���¼;��+���Ç;�����ó;�� ��� <�� ���<��-���#<��5���Q<��!���‡<��-���©<��*���×<��#���=��#���&=��?���J=��"���Š=��%���­=��"���Ó=��.���ö=��4���%>��#���Z>�����~>��&���–>�����½>��!���×>��A���ù>��Q���;?��6���?��0���Ä?��4���õ?��-���*@�� ���X@�����y@�����‰@��*���¢@��5���Í@��'���A��.���+A��M���ZA��%���¨A��9���ÎA��7���B��&���@B�����gB��4���xB�����­B��<���ÌB����� C��8���#C�� ���\C��"���}C��(��� C��1���ÉC��)���ûC��*���%D��!���PD�����rD��O���ŽD��*���ÞD��/��� E��#���9E��"���]E��&���€E�����§E��*���»E��(���æE�����F��/���(F��"���XF��*���{F��%���¦F�����ÌF�����âF������G��/���G��3���MG�����G��2���›G��.���ÎG��)���ýG��%���'H��.���MH��(���|H��-���¥H��*���ÓH�����þH�����I��2���;I��G���nI��©���¶I��V���`J��.���·J��)���æJ�����K�����-K�� ���<K��&���]K�����„K��&��� K��2���ÇK��*���úK��8���%L��1���^L�����L�����¯L��/���ÎL�����þL�����M��D���;M�����€M��3���ŸM��2���ÓM��$���N�� ���+N�����LN��C���dN��$���¨N��T���ÍN��S���"O��#���vO�����šO�����¶O��"���ÓO��-���öO�����$P��$���DP�����iP��$���‡P�����¬P�����ËP�����çP��5���ùP�����/Q��%���BQ�����hQ�����ˆQ��!���¦Q��0���ÈQ�����ùQ��(���R��.���?R�� ���nR�����|R�����–R��H���°R��$���ùR��'���S��!���FS��$���hS��$���S�����²S�����ÒS�����æS��,���T��$���1T��=���VT��!���”T�����¶T�����ÕT�����ÛT��)���ûT�����%U��!���EU�����gU��9���„U��5���¾U��*���ôU��!���V��0���AV��%���rV�����˜V�� ���¨V�����³V��6���ÏV��6���W��"���=W��2���`W��7���“W��3���ËW��6���ÿW�����6X�����GX�� ���]X��L���hX�����µX�����ÏX�����ïX�����Y�����Y��_���<Y��m���œY����� Z��#���'Z��3���KZ�����Z��/���…Z�����µZ��2���ÇZ��‹���úZ��}���†[�����\��n���\��(���‡\�����°\�����É\�����I]�����b]��G���z]�����Â]��'���Ç]�� ���ï]��2���ü]�����/^�����F^�����f^��i���^�� ���ë^�����÷^����� _��,���)_��8���V_��1���_��N���Á_��<���`��#���M`��=���q`�����¯`��(���Ê`��)���ó`��!���a�����?a��$���Ya��5���~a��/���´a��*���äa�����b��1���#b��F���Ub��F���œb�� ���ãb�� ���c�����%c�����Ac�����_c�����{c�����˜c��1���´c�����æc�����d����� d��J��� d��%���Xd�����~d��4���“d��4���Èd�����ýd�����e��9���$e��7���^e��G���–e��2���Þe��G���f��6���Yf��0���f��0���Áf��W���òf��x���Jg��*���Ãg��:���îg��O���)h��ƒ���yh��,���ýh��&���*i��'���Qi��K���yi��S���Åi��D���j�����^j�����{j�����›j��3���»j�����ïj��$��� k�����2k�����Jk��*���ik��,���”k�����Ák��1���Ók��-���l��X���3l�����Œl�����Ÿl��P���¸l����� m�����m��2���+m�����^m��;���dm��/��� m��J���Ðm�����n��.���3n��(���bn��4���‹n��0���Àn�����ñn��I���o��H���[o��1���¤o��2���Öo��2��� p��(���<p�����ep��(���~p��$���§p��N���Ìp�����q��Ê���1q��!���üq��Z��r����yt��û��˜u����”y��(���˜|��ì��Á|��q��®~��j�� €��;���‹�����Ç����Ì��ß��é…��N���ɇ��5���ˆ��5���Nˆ��.���„ˆ��N���³ˆ��)���‰��M���,‰��8���z‰�����³‰��O���»‰��)��� Š��6���5Š��$���lŠ��1���‘Š��#���Ê��*���çŠ��$���‹��'���7‹��<���_‹��¥���œ‹��X���BŒ�����›Œ�����«Œ�����»Œ�����ÏŒ�����äŒ���������� �����%�����A�����\��I���p��C���º��C���þ��A���BŽ��A���„Ž�����ÆŽ�����ÊŽ�����ÏŽ��.���ÕŽ�������$���!��%���F��5���l��4���¢�����×�����ê�����þ�������7���!�����Y�����j�����{�����‘�����§�����¼�����Ñ�����×�����Ý��5���÷��1���-‘�����_‘�����d‘�����j‘��N���p‘�����¿‘�����Æ‘�����Α�����Ó‘�����ב�����Ú‘�� ���ù‘�����’����� ’�����%’�����9’�����O’�����V’�����^’�����y’�����’��#���‘’��"���µ’�����Ø’��6���ò’��6���)“��2���`“��2���““�� ���Æ“�����Г�����æ“�����ì“�����ñ“����� ”��s��#”��D���—•��=���Ü•��?���–��9���Z–��E���”–��u���Ú–��"���P—��Ó��s—��ª��G™��A���òš�����4›��R���P›��d���£›��J���œ�����Sœ�����sœ�����’œ�����¯œ�����Íœ�����ìœ����� �����)�����I�����P��K���W�� ���£�� ���­�� ���·�����Å�����Ì�����Ï�� ���ì��"���ö��7���ž��+���Qž��"���}ž����� ž�����Àž�����Üž��*���øž��$���#Ÿ�����HŸ�����PŸ�����gŸ�����~Ÿ�����Ÿ��3���¼Ÿ�����ðŸ����� ����� ����� �����% ��/���. ��$���^ ��‘��ƒ ��À���£��‹���Ö£��ù���b¤�����\¥��2���d¥�� ���—¥��-���¸¥��)���æ¥��/���¦��G���@¦��$���ˆ¦��4���­¦�����â¦�����þ¦�����§��k���7§�����£§�����¸§�����Ô§�����ð§����� ¨��Z���*¨��B���…¨��3���Ȩ�����ü¨��&���©�����*©�� ���@©��2���J©��&���}©�����¤©��{���º©��3���6ª��>���jª��)���©ª��.���Óª��1���«��$���4«�� ���Y«��?���z«��!���º«��-���Ü«��6��� ¬��3���A¬��C���u¬��.���¹¬�����è¬��-���­�����1­��%���M­��E���s­��^���¹­��4���®��3���M®��1���®��2���³®�����æ®�����¯�����¯��3���2¯��I���f¯��7���°¯��B���è¯��t���+°��4��� °��Y���Õ°��J���/±��5���z±�����°±��J���̱��(���²��V���@²�� ���—²��B���¸²��'���û²��2���#³��9���V³��3���³��,���ij��.���ñ³��0��� ´��%���Q´��d���w´��9���Ü´��;���µ��6���Rµ��%���‰µ��8���¯µ�����èµ��8����¶��5���9¶�����o¶��.���޶��.���½¶��@���ì¶��2���-·�����`·��(���{·��$���¤·��?���É·��:��� ¸�����D¸��G���b¸��<���ª¸��9���ç¸��9���!¹��4���[¹��6���¹��7���ǹ��0���ÿ¹�����0º��,���Jº��B���wº��W���ºº��î���»��r���¼��7���t¼��8���¬¼��+���å¼�����½��*���(½��2���S½�����†½��/���¥½��?���Õ½��0���¾��C���F¾��4���о��$���¿¾��%���ä¾��O��� ¿��*���Z¿��1���…¿��r���·¿��3���*À��G���^À��M���¦À��8���ôÀ��2���-Á��"���`Á��G���ƒÁ��2���ËÁ��s���þÁ��s���rÂ��(���æÂ��3���Ã�����CÃ��&���_Ã��2���†Ã�� ���¹Ã��%���ÚÃ�� ����Ä��,���!Ä��0���NÄ��-���Ä�����­Ä��H���¿Ä�����Å��-���Å��1���JÅ��'���|Å��+���¤Å��K���ÐÅ��)���Æ��/���FÆ��.���vÆ�����¥Æ��!���µÆ�����ׯ��j���ôÆ��(���_Ç��1���ˆÇ��%���ºÇ��(���àÇ��$��� È��.���.È�����]È��'���qÈ��9���™È��(���ÓÈ��r���üÈ��!���oÉ�����‘É�����±É��+���·É��<���ãÉ��#��� Ê��!���DÊ�����fÊ��?���‚Ê��8���ÂÊ��<���ûÊ��'���8Ë��<���`Ë��)���Ë�� ���ÇË�� ���ÕË�� ���âË��Q���Ì��S���UÌ��/���©Ì��G���ÙÌ��L���!Í��3���nÍ��?���¢Í�����âÍ��%���úÍ����� Î��V���1Î��'���ˆÎ��+���°Î�����ÜÎ�����õÎ�����Ï��j���1Ï��q���œÏ�����Ð��4���-Ð��:���bÐ�����Ð��7���¥Ð�����ÝÐ��F���øÐ��‘���?Ñ��‚���ÑÑ�����TÒ�����kÒ��*���ëÒ�����Ó��ž���4Ó��$���ÓÓ��&���øÓ��N���Ô�� ���nÔ��/���zÔ�����ªÔ��8���»Ô�����ôÔ��-���Õ��+���?Õ��w���kÕ�����ãÕ��!���ôÕ��0���Ö��6���GÖ��?���~Ö��A���¾Ö��Y����×��I���Z×��'���¤×��L���Ì×�����Ø��/���8Ø��A���hØ��-���ªØ��$���ØØ��4���ýØ��/���2Ù��<���bÙ��5���ŸÙ�����ÕÙ��6���êÙ��V���!Ú��V���xÚ�����ÏÚ��4���ïÚ�����$Û�����AÛ�����`Û�����{Û�����—Û��<���³Û��/���ðÛ����� Ü�����(Ü��T���0Ü��.���…Ü��#���´Ü��B���ØÜ��D���Ý��'���`Ý��(���ˆÝ��>���±Ý��C���ðÝ��H���4Þ��D���}Þ��E���ÂÞ��>���ß��)���Gß��\���qß��j���Îß��œ���9à��5���Öà��B��� á��[���Oá��¤���«á��7���Pâ��*���ˆâ��1���³â��x���åâ��t���^ã��F���Óã��,���ä��!���Gä��+���iä��>���•ä�����Ôä��8���ðä��*���)å��2���Tå��1���‡å��3���¹å�����íå��B���æ��8���Iæ��d���‚æ�����çæ�� ���ûæ��d���ç�����ç�����™ç��7���´ç�����ìç��D���óç��9���8è��Z���rè�����Íè��J���åè��!���0é��^���Ré��6���±é��$���èé��F��� ê��P���Tê��N���¥ê��N���ôê��J���Cë��0���Žë�����¿ë��-���Þë��(��� ì��_���5ì�� ���•ì��ø���¶ì��-���¯í��‘��Ýí��0��oð��„�� ñ��Å��%ö��2���ëù��@��ú��·��_ü��`��þ��;���xÿ�� ���´ÿ�� ��¾ÿ��Q��Ë�_����<���}�<���º�9���÷�_���1�9���‘�_���Ë�G���+ ����s �h���y �/���â �H��� �3���[ �<��� �#���Ì �<���ð �%���- �"���S �5���v �Í���¬ �l���z ����ç ����ö ���� ����# �-���@ ����n ����t ����’ ����° ����Í �F���å �H���,�I���u�K���¿�K��� ����W����[����`�0���h� ���™�2���º�2���í�:��� �3���[��������©�/���È����ø�E�����3���F����z����‹����©����È� ���è���� ���������6���0�K���g����³����º����À�n���Æ����5����<����B����K����S�%���[� �������Ž����”����­����Á����×����ß�!���æ���������.���.�.���]����Œ�7���¥�7���Ý�3����3���I� ���}����‡� ���¥� ���±����»����Õ��������Ò������*������ø���­�����Ã��M������� �������¼����û����������”���F��€���N���9���P������Í������������������!��*�������4���ä�����������6���H��ì���ö��������������æ��K���ð������„��u�� ��¦��J��·������������´������U��—�������à��2������������������¹��A���V���È��F���E���š���Š���Î������B��ü����������� ���~��m��Ç���`������í������¤���&��6������¶���ˆ��Z������®���Å���������� ��{��� ��†�����������“���ô��Ð�����b��¤��˜������N��r��3�������À��l�����~�������I�����O���n�����œ������h���©���8��w��q��ý�������±���#��©���������������i��‘������ù��A��o���������T���°��§��8�������?���S�������ÿ�������\��T��²���â���������������)��ƒ���ª���‹������]��&�������ó��•�������ç���›���������������à�������…���Ž���=��ò���+������Ú����������������'���e���á�� ���Ù���:������� ��›��(��@��û��������,���ù�������{������–���ñ��ì�����¾��v��¿��;���7���f���Ÿ���'������!���±��s��´�������l���C�������×���®��4��H�������ê���ó���@���é����}���ê��-���Â���^������²��Á��º������������}����¹���-��õ��Ì�����������Õ�����ë�����P�������À���ß����Æ������>��‰���������5�������Ó����� ���˜������e������Ó���<���:������X��2����������·������������Ã���G������Ü������°���\�����µ�� ��k�������’��«��¨����������Ä�������s���ú��p��5��è���|��ˆ���»���O��Œ��Â��a��Y���I��c��³��Z���c����������ƒ��]�������¡���_����������^��� ��Ú������� ���Ò���â��?��������ô�������ã���U���Í������g�������Ü���Þ���Î���D���Û������¸���y��‹�������„���ç��R��Ë���������í���ð���������Ù������/��Ý�������)�����%��0����������W���L��Ž������Ê����������=�������î���å���‚�������S��[��������æ�������×�� ���µ���n��¯�������.��/���õ���$��`��¼���C��½��ª��k��¡��B���0���D������–��M��Ö��3������þ�����������Ø�������Õ��1���³���|���p���������������Ñ�����R�������¯������€������¬���­����É���÷���Ð���È���"���������q���‡��� ����������Ÿ����������7������������������¸��š������‚��«���w���§���á�������;��Ë���Å�������$���j���ã��ž��<����������Ô�����¢��m�������9��Ï���Ê���L���Û��ë���b���X���ß���������a������1�����é�������ï������ž���t��������¬��>�������ñ���Ø��z����,��o���������x��r�������¢���Þ��%���¦���¥���†��j����������ø��"��Ï��Š��Ý������ä��÷��h������Æ�������É������Y������è��J���î����������Ñ��º���x���y������� �������v�������������Q��(�����������•��Ô������d��‘���…��Œ���¶����������—��‰���½���™��ò��”��¾���u�������ú���V������œ���¥������¨��Ä������Q����������Ì������[���f��d�������K������‡������ï��+���»��g������™���£��“��#���Á���å����.�������£���E��’�������W��t������ö��z���G��_���Ö�������¿���Ç��i����������������������� 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 ... � quota [-qvswugQm] [-F quotaformat] -f filesystem ... � Block limits File limits � -u, --user edit user data -g, --group edit group data � Can open directory %s: %s � 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 � %8llu %8llu %8llu� 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 �#%-7d�%-8.8s�%-9s used soft hard grace used soft hard grace �%02d:%02d�%8llu �%d %llu %llu �%ddays�%s�%s (%s) %ss: �%s (%s): �%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 �-t, --edit-period edit grace period -T, --edit-times edit grace times for user/group -h, --help display this help text and exit -V, --version display version information and exit �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 bind to given address: %s �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 socket: %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 of file to edit: %s �Cannot duplicate descriptor of file to write to: %s �Cannot duplicate descriptor of temp file: %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 reopen temp file: %s �Cannot reopen!�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 in config file (line %d), ignoring �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�Group and user quotas cannot be used together. �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. �Line %d too long. Truncating. �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. �Possible error in config file (line %d), ignoring �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 �Unterminated last line, ignoring �Usage: %s [-guvp] [-F quotaformat] [-x state] -a %s [-guvp] [-F quotaformat] [-x state] filesys ... -a, --all %s -f, --off turn quotas off -u, --user operate on user quotas -g, --group operate on group quotas -p, --print-state print whether quotas are on or off -x, --xfs-command=cmd perform XFS quota command -F, --format=formatname operate on specific quota format -v, --verbose print more messages -h, --help display this help text and exit -V, --version display version information and exit �Usage: edquota %1$s[-u] [-F formatname] [-p username] [-f filesystem] username ... edquota %1$s-g [-F formatname] [-p groupname] [-f filesystem] groupname ... edquota [-u|g] [-F formatname] [-f filesystem] -t edquota [-u|g] [-F formatname] [-f filesystem] -T username|groupname ... �Usage: setquota [-u|-g] %1$s[-F quotaformat] <user|group> <block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|<filesystem>... setquota [-u|-g] %1$s[-F quotaformat] <-p protouser|protogroup> <user|group> -a|<filesystem>... setquota [-u|-g] %1$s[-F quotaformat] -b [-c] -a|<filesystem>... setquota [-u|-g] [-F quotaformat] -t <blockgrace> <inodegrace> -a|<filesystem>... setquota [-u|-g] [-F quotaformat] <user|group> -T <blockgrace> <inodegrace> -a|<filesystem>... -u, --user set limits for user -g, --group set limits for group -a, --all set limits for all filesystems --always-resolve always try to resolve name, even if is composed only of digits -F, --format=formatname operate on specific quota format -p, --prototype=protoname copy limits from user/group -b, --batch read limits from standard input -c, --continue-batch continue in input processing in case of an error �Usage: warnquota [-ugsid] [-F quotaformat] [-c configfile] [-q quotatabfile] [-a adminsfile] [filesystem...] -u, --user warn users -g, --group warn groups -s, --human-readable send information in more human friendly units -i, --no-autofs avoid autofs mountpoints -d, --no-details do not send quota information itself -F, --format=formatname use quotafiles of specific format -c, --config=config-file non-default config file -q, --quota-tab=quotatab-file non-default quotatab -a, --admins-file=admins-file non-default admins file -h, --help display this help message and exit -v, --version display version information and exit �Usage: %s [-acfugvViTq] [filesystem...] �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 �Usage: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat] �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. �XFS_IOC_FSBULKSTAT ioctl failed: %s �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 create TCP service. �cannot create udp service. �cannot find %s on %s [%s] �cannot open %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 �unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP). �unable to register (RQUOTAPROG, EXT_RQUOTAVERS, UDP). �unable to register (RQUOTAPROG, RQUOTAVERS, TCP). �unable to register (RQUOTAPROG, RQUOTAVERS, UDP). �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 POT-Creation-Date: 2015-12-16 18:19+0100 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… � quota [-qvswugQm] [-F FORMÃT] -f SOUBOROVÃ_SYSTÉM… � Limity bloků Limity souborů � -u, --user upraví údaje o uživateli -g, --group upraví údaje o skupinÄ› � Adresář %s nelze otevřít: %s � 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ů � %8llu %8llu %8llu� 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 �Ä%-7d�%-8.8s�%-9s užito mÄ›kký pevný odklad užito mÄ›kký pevný odklad �%02d:%02d�%8llu �%d %llu %llu �%ddnů�%s�%s (%s) objekty třídy %s: �%s (%s): �%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 �-t, --edit-period zmÄ›ní periodu odkladu -T, --edit-times zmÄ›ní dobu odkladu pro uživatele/skupinu -h, --help zobrazí tuto nápovÄ›du a skonÄí -V, --version zobrazí údaje o verzi a skonÄí �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). �Na zadanou adresu se nelze pÅ™ilepit: %s �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 �Socket nelze vytvoÅ™it: %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 editovaného souboru nelze zmnožit: %s �Deskriptor souboru nelze zmnožit pro zápis: %s �Deskriptor doÄasného souboru nelze zmnožit: %s �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 �DoÄasný soubor nelze znovu otevřít: %s �Nelze znovu otevřít!�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 v konfiguraÄním souboru (řádek %d), ignoruje se. �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�Kvóty skupiny a uživatele nelze použít spoleÄnÄ›. �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ý. �Řádek %d je příliÅ¡ dlouhý. Bude zkrácen. �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. �Možná chyba v konfiguraÄním souboru (řádek %d), ignoruje se. �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 �NeukonÄený poslední řádek, ignoruje se. �Použití: %s [-guvp] [-F FORMÃT] [-x STAV] -a %s [-guvp] [-F FORMÃT] [-x STAV] SYSTÉM_SOUBORŮ… -a, --all %s -f, --off vypne kvóty -u, --user operuje nad kvótami uživatele -g, --group operuje na kvótami skupiny -p, --print-state vypíše, zda-li jsou kvóty zapnuty, nebo vypnuty -x, --xfs-command=PŘÃKAZ provede příkaz kvóty XFS -F, --format=FORMÃT operuje nad zadaným kvótovým formátem -v, --verbose vypisuje podrobná hlášení -h, --help zobrazí tuto nápovÄ›du a skonÄí -V, --version zobrazí údaje o verzi a skonÄí �Použití: edquota %1$s[-u] [-F FORMÃT] [-p UŽIVATEL] [-f SOUBOROVÃ_SYSTÉM] UŽIVATEL… edquota %1$s-g [-F FORMÃT] [-p SKUPINA] [-f SOUBOROVÃ_SYSTÉM] SKUPINA… edquota [-u|g] [-F FORMÃT] [-f SOUBOROVÃ_SYSTÉM] -t edquota [-u|g] [-F FORMÃT] [-f SOUBOROVÃ_SYSTÉM] -T UŽIVATEL|SKUPINA… �Použití: setquota [-u|-g] %1$s[-F FORMÃT_KVÓTY] UŽIVATEL|SKUPINA MÄšKKÃ_LIMIT_BLOKÅ® PEVNÃ_LIMIT_BLOKÅ® MÄšKKÃ_LIMIT_IUZLÅ® PEVNÃ_LIMIT_IUZLÅ® -a|SYSTÉM_SOUBORŮ… setquota [-u|-g] %1$s[-F FORMÃT_KVÓTY] -p VZOROVÃ_UŽIVATEL|VZOROVÃ_SKUPINA UŽIVATEL|SKUPINA -a|SYSTÉM_SOUBORŮ… setquota [-u|-g] %1$s[-F FORMÃT_KVÓTY] -b [-c] -a|SYSTÉM_SOUBORŮ… setquota [-u|-g] [-F FORMÃT_KVÓTY] -t PERIODA_BLOKÅ® PERIODA_IUZLÅ® -a|SYSTÉM_SOUBORŮ… setquota [-u|-g] [-F FORMÃT_KVÓTY] UŽIVATEL|SKUPINA -T DOBA_BLOKÅ® DOBA_IUZLÅ® -a|SYSTÉM_SOUBORŮ… -u, --user nastaví limity pro uživatele -g, --group nastaví limity pro skupinu -a, --all nastaví limity pro vÅ¡echny souborové systémy --always-resolve vždy pÅ™ekládá jména, i když se skládají jen z Äíslic -F, --format=FORMÃT_KVÓTY pracuje nad urÄitým formátem kvót -p, --prototype=VZOR zkopíruje limity z uživatele/skupiny -b, --batch limity naÄte v dávce ze standardního vstupu -c, --continue-batch pokraÄuje ve zpracování vstupu i v případÄ› chyby �Použití: warnquota [-ugsid] [-F FORMÃT_KVÓT] [-c KONFIGURAÄŒNÃ_SOUBOR] [-q SOUBOR_QUOTATAB [-a SOUBOR_SE_SPRÃVCI] [SYSTÉM_SOUBORŮ…] -u, --user upozorní uživatele -g, --group upozorní skupiny -s, --human-readable odesílá údaje v jednotkách vhodných pro ÄlovÄ›ka -i, --no-autofs vynechá přípojné body typu autofs -d, --no-details neodesílá samotné údaje o kvótách -F, --format=FORMÃT_KVÓT použije kvótové soubory zadaného formátu -c, --config=KONFIGURAÄŒNÃ_SOUBOR jiný konfiguraÄní soubor -q, --quota-tab=SOUBOR_QUOTATAB jiný quotatab -a, --admins-file=SOUBOR_SE_SPRÃVCI jiný soubor správců -h, --help zobrazí tuto nápovÄ›du a skonÄí -v, --version zobrazí údaje o verzi a skonÄí �Použití: %s [-acfugvViTq] [SYSTÉM_SOUBORŮ…] �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í �Použití: quota [-guqvswim] [-l | [-Q | -A]] [-f FORMÃT] �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. �IOCTL XFS_IOC_FSBULKSTAT selhalo: %s �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�TCP službu nelze vytvoÅ™it. �UDP službu nelze vytvoÅ™it. �%s nelze na %s [%s] nalézt �%s nelze otevřít: %s �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 �nelze zaregistrovat (RQUOTAPROG, EXT_RQUOTAVERS, TCP). �nelze zaregistrovat (RQUOTAPROG, EXT_RQUOTAVERS, UDP). �nelze zaregistrovat (RQUOTAPROG, RQUOTAVERS, TCP.) �nelze zaregistrovat (RQUOTAPROG, RQUOTAVERS, UDP.) �neurÄeno�neznámé upozornÄ›ní kvóty�nenastaveno�uživatel�uživatel %s neexistuje. �použití %s na %s [%s]: %s ���������������quota-4.03/po/pl.po���������������������������������������������������������������������������������0000644�0001750�0000144�00000300621�12634316466�011114� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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: 2015-12-16 18:19+0100\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:253 #, c-format msgid "Found an invalid UUID: %s\n" msgstr "Znaleziono nieprawidÅ‚owy UUID: %s\n" #: bylabel.c:273 #, 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:1024 quotacheck.c:314 repquota.c:66 #: common.c:126 #, 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:81 repquota.c:148 #: quotaon.c:137 setquota.c:247 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:749 #, 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:380 msgid "Unknown action should be performed.\n" msgstr "MiaÅ‚a być wykonana nieznana akcja.\n" #: warnquota.c:56 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:58 #, 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:65 #, 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:67 #, 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:186 #, c-format msgid "ldap_initialize() failed: %s\n" msgstr "" #: warnquota.c:195 #, c-format msgid "ldap_start_tls_s() failed: %s\n" msgstr "" #: warnquota.c:201 #, c-format msgid "ldap_sasl_bind_s() failed: %s\n" msgstr "" #: warnquota.c:216 #, c-format msgid "Cannot get name for uid/gid %u.\n" msgstr "Nie można uzyskać nazwy dla uid/gid %u.\n" #: warnquota.c:300 #, c-format msgid "Cannot create pipe: %s\n" msgstr "Nie można utworzyć potoku: %s\n" #: warnquota.c:306 #, c-format msgid "Cannot fork: %s\n" msgstr "Nie można wykonać fork: %s\n" #: warnquota.c:311 #, c-format msgid "Cannot duplicate descriptor: %s\n" msgstr "Nie można powielić deskryptora: %s\n" #: warnquota.c:315 #, c-format msgid "Cannot execute '%s': %s\n" msgstr "Nie można uruchomić '%s': %s\n" #: warnquota.c:320 #, c-format msgid "Cannot open pipe: %s\n" msgstr "Nie można otworzyć potoku: %s\n" #: warnquota.c:398 #, fuzzy msgid "Could not setup ldap connection.\n" msgstr "Nie można nawiÄ…zać połączenia LDAP, powrót.\n" #: warnquota.c:420 #, c-format msgid "Error with %s.\n" msgstr "Błąd przy %s.\n" #: warnquota.c:421 #, c-format msgid "ldap_search_ext_s() failed: %s\n" msgstr "" #: warnquota.c:427 #, 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:431 #, 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:441 #, c-format msgid "Could not get values for %s.\n" msgstr "Nie można uzyskać wartoÅ›ci dla %s.\n" #: warnquota.c:487 #, 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:539 #, c-format msgid "" "\n" " Block limits File limits\n" msgstr "" "\n" " Limity bloków Limity plików\n" #: warnquota.c:540 #, 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:580 #, c-format msgid "Cannot wait for mailer: %s\n" msgstr "Nie można czekać na wysÅ‚anie poczty: %s\n" #: warnquota.c:582 msgid "Warning: Mailer exitted abnormally.\n" msgstr "Uwaga: Program wysyÅ‚ajÄ…cy pocztÄ™ nie zakoÅ„czyÅ‚ siÄ™ normalnie.\n" #: warnquota.c:639 #, 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:662 #, 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:676 #, 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:696 #, 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:745 #, c-format msgid "Cannot open %s: %s\n" msgstr "nie można otworzyć %s: %s\n" #: warnquota.c:765 #, c-format msgid "Line %d too long. Truncating.\n" msgstr "Linia %d zbyt dÅ‚uga. UciÄ™to.\n" #: warnquota.c:857 #, 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:881 #, c-format msgid "Error in config file (line %d), ignoring\n" msgstr "Błąd w pliku konfiguracyjnym (linia %d), zignorowano\n" #: warnquota.c:884 #, c-format msgid "Possible error in config file (line %d), ignoring\n" msgstr "Możliwy błąd w pliku konfiguracyjnym (linia %d), zignorowano\n" #: warnquota.c:887 msgid "Unterminated last line, ignoring\n" msgstr "NiezakoÅ„czona ostatnia linia, zignorowano\n" #: warnquota.c:893 #, 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:915 #, c-format msgid "Cannot open file with group administrators: %s\n" msgstr "Nie można otworzyć pliku z administratorami grup: %s\n" #: warnquota.c:930 #, 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:939 #, 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:949 #, 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:1012 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 send information in more human friendly " "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" "-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:1093 #, 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:426 #, c-format msgid "error (%d) while opening %s\n" msgstr "błąd (%d) podczas otwierania %s\n" #: quotacheck.c:431 #, 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:436 #, 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:441 #, c-format msgid "error (%d) while opening inode scan\n" msgstr "błąd (%d) podczas otwierania skanu i-wÄ™złów\n" #: quotacheck.c:446 #, c-format msgid "error (%d) while starting inode scan\n" msgstr "błąd (%d) podczas uruchamiania skanu i-wÄ™złów\n" #: quotacheck.c:454 #, c-format msgid "Found i_num %ld, blocks %ld\n" msgstr "Znaleziono i_num %ld, %ld bloków\n" #: quotacheck.c:460 msgid "High uid detected.\n" msgstr "Wykryto duży uid.\n" #: quotacheck.c:476 #, 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:500 #, c-format msgid "Cannot stat directory %s: %s\n" msgstr "Nie można wykonać stat na katalogu %s: %s\n" #: quotacheck.c:512 #, c-format msgid "" "\n" "Can open directory %s: %s\n" msgstr "" "\n" "Nie można otworzyć katalogu %s: %s\n" #: quotacheck.c:524 #, 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:535 #, c-format msgid "pushd %s/%s\n" msgstr "pushd %s/%s\n" #: quotacheck.c:551 #, 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:561 msgid "Scanning stored directories from directory stack\n" msgstr "Skanowanie zapisanych na stosie katalogów\n" #: quotacheck.c:565 #, c-format msgid "" "popd %s\n" "Entering directory %s\n" msgstr "" "popd %s\n" "WejÅ›cie do katalogu %s\n" #: quotacheck.c:577 #, c-format msgid "Leaving %s\n" msgstr "Opuszczanie %s\n" #: quotacheck.c:617 #, c-format msgid "Going to check %s quota file of %s\n" msgstr "Rozpoczynanie sprawdzania pliku limitów %s na %s\n" #: quotacheck.c:623 #, 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:624 quotacheck.c:942 msgid "Should I continue?" msgstr "Czy kontynuować?" #: quotacheck.c:625 quotacheck.c:943 #, c-format msgid "As you wish... Canceling check of this file.\n" msgstr "Wedle życzenia... anulowanie sprawdzania tego pliku.\n" #: quotacheck.c:630 #, 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:637 #, c-format msgid "Error while syncing quotas on %s: %s\n" msgstr "Błąd podczas synchronizacji limitów na %s: %s\n" #: quotacheck.c:642 #, c-format msgid "Cannot get quotafile name for %s\n" msgstr "Nie można uzyskać nazwy pliku limitów dla %s\n" #: quotacheck.c:647 quotaio.c:150 quotasys.c:677 #, c-format msgid "Cannot open quotafile %s: %s\n" msgstr "Nie można otworzyć pliku limitów %s: %s\n" #: quotacheck.c:687 msgid "Renaming new files to proper names.\n" msgstr "Zmiana nazw nowych plików na wÅ‚aÅ›ciwe.\n" #: quotacheck.c:689 #, 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:692 msgid "Old file not found.\n" msgstr "Nie znaleziono starego pliku.\n" #: quotacheck.c:695 #, 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:704 msgid "Old file found removed during check!\n" msgstr "Stary plik zostaÅ‚ usuniÄ™ty przy sprawdzaniu!\n" #: quotacheck.c:707 #, 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:713 #, c-format msgid "EXT2_IOC_GETFLAGS failed: %s\n" msgstr "ioctl XFS_IOC_GETFLAGS nie powiódÅ‚ siÄ™: %s\n" #: quotacheck.c:717 #, 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:720 #, 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:729 #, c-format msgid "Renaming old quotafile to %s~\n" msgstr "Zmiana nazwy starego pliku limitów na %s~\n" #: quotacheck.c:735 #, 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:737 #, 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:743 msgid "Renaming new quotafile\n" msgstr "Zmiana nazwy nowego pliku limitów\n" #: quotacheck.c:755 #, c-format msgid "Cannot change permission of %s: %s\n" msgstr "Nie można zmienić uprawnieÅ„ %s: %s\n" #: quotacheck.c:762 #, 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:767 #, 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:787 #, c-format msgid "Dumping gathered data for %ss.\n" msgstr "Zrzucanie zgromadzonych danych typu %s.\n" #: quotacheck.c:790 #, 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:796 #, 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:823 #, 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:826 msgid "Data dumped.\n" msgstr "Dane zrzucone.\n" #: quotacheck.c:834 #, 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:838 #, 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:851 #, 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:877 #, 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:879 #, 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:884 #, 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:896 #, 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:901 #, c-format msgid "Substracted %lu bytes.\n" msgstr "OdjÄ™to %lu bajtów.\n" #: quotacheck.c:914 #, c-format msgid "Cannot stat mountpoint %s: %s\n" msgstr "Nie można wykonać stat na punkcie montowania %s: %s\n" #: quotacheck.c:916 #, c-format msgid "Mountpoint %s is not a directory?!\n" msgstr "Punkt montowania %s nie jest katalogiem?!\n" #: quotacheck.c:941 #, 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:949 #, 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:957 msgid "Filesystem remounted read-only\n" msgstr "System plików przemontowany tylko do odczytu\n" #: quotacheck.c:960 #, c-format msgid "Scanning %s [%s] " msgstr "Skanowanie %s [%s] " #: quotacheck.c:977 msgid "done\n" msgstr "zrobiono\n" #: quotacheck.c:986 #, c-format msgid "Checked %d directories and %d files\n" msgstr "Sprawdzono %d katalogów i %d plików\n" #: quotacheck.c:990 #, 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:991 msgid "Filesystem remounted RW.\n" msgstr "Przemontowano system plików do zapisu i odczytu.\n" #: quotacheck.c:1034 #, 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:1040 #, 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:1106 #, c-format msgid "Cannot get system info: %s\n" msgstr "Nie można uzyskać informacji systemowych: %s\n" #: quotacheck.c:1126 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:1140 quotasys.c:767 msgid "Cannot initialize mountpoint scan.\n" msgstr "Nie można zainicjować skanu punktów montowania.\n" #: quotacheck.c:1145 #, c-format msgid "Skipping %s [%s]\n" msgstr "Pomijanie %s [%s]\n" #: quotacheck.c:1162 #, 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:1167 #, c-format msgid "Detected quota format %s\n" msgstr "Wykryto format limitów %s\n" #: quotacheck.c:1188 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:1206 #, 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" #: quot.c:81 #, c-format msgid "Usage: %s [-acfugvViTq] [filesystem...]\n" msgstr "SkÅ‚adnia: %s [-acfugvViTq] [system-plików...]\n" #: quot.c:178 #, c-format msgid "%s (%s):\n" msgstr "%s (%s):\n" #: quot.c:182 quot.c:186 #, c-format msgid "%d\t%llu\t%llu\n" msgstr "%d\t%llu\t%llu\n" #: quot.c:195 #, c-format msgid "%s (%s) %ss:\n" msgstr "%s (%s) %ss:\n" #: quot.c:203 quot.c:205 #, c-format msgid "%8llu " msgstr "%8llu " #: quot.c:208 #, c-format msgid "%s" msgstr "%s" #: quot.c:210 #, c-format msgid "%-8.8s" msgstr "%-8.8s" #: quot.c:212 #, c-format msgid "#%-7d" msgstr "#%-7d" #: quot.c:214 #, c-format msgid " %8llu %8llu %8llu" msgstr " %8llu %8llu %8llu" #: quot.c:362 #, c-format msgid "cannot open %s: %s\n" msgstr "nie można otworzyć %s: %s\n" #: quot.c:382 #, c-format msgid "XFS_IOC_FSBULKSTAT ioctl failed: %s\n" msgstr "ioctl XFS_IOC_FSBULKSTAT nie powiódÅ‚ siÄ™: %s\n" #: quotasync.c:27 #, fuzzy, c-format msgid "" "%1$s: Utility for syncing quotas.\n" "Usage: %1$s [-ug] mount-point...\n" " or: %1$s [-ug] -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:34 #, fuzzy, c-format msgid "" "Options:\n" "-u, --user synchronize user quotas\n" "-g, --group synchronize group 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:42 #, fuzzy, c-format msgid "Report bugs to <%s>.\n" msgstr "Błędy na adres %s\n" #: quotasync.c:106 #, c-format msgid "%s quota sync failed: %s\n" msgstr "Synchronizacja limitów %s nie powiodÅ‚a siÄ™: %s\n" #: quotasync.c:119 #, 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 "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:160 #, 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:289 #, 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:294 #, 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:300 msgid "Warning" msgstr "Uwaga" #: quota_nld.c:303 msgid "Error" msgstr "Błąd" #: quota_nld.c:305 msgid "Info" msgstr "Informacja" #: quota_nld.c:308 msgid "file limit reached" msgstr "osiÄ…gniÄ™to twardy limit plików" #: quota_nld.c:311 msgid "file quota exceeded too long" msgstr "miÄ™kki limit plików przekroczony zbyt dÅ‚ugo" #: quota_nld.c:314 msgid "file quota exceeded" msgstr "przekroczono miÄ™kki limit plików" #: quota_nld.c:317 msgid "block limit reached" msgstr "osiÄ…gniÄ™to twardy limit bloków" #: quota_nld.c:320 msgid "block quota exceeded too long" msgstr "miÄ™kki limit bloków przekroczony zbyt dÅ‚ugo" #: quota_nld.c:323 msgid "block quota exceeded" msgstr "przekroczono miÄ™kki limit bloków" #: quota_nld.c:326 msgid "got below file limit" msgstr "zejÅ›cie poniżej twardego limitu plików" #: quota_nld.c:329 msgid "got below file quota" msgstr "zejÅ›cie poniżej miÄ™kkiego limitu plików" #: quota_nld.c:332 msgid "got below block limit" msgstr "zejÅ›cie poniżej twardego limitu bloków" #: quota_nld.c:335 msgid "got below block quota" msgstr "zejÅ›cie poniżej miÄ™kkiego limitu bloków" #: quota_nld.c:338 msgid "unknown quota warning" msgstr "nieznane ostrzeżenie dotyczÄ…ce limitów" #: quota_nld.c:342 #, 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:355 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:373 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:389 #, 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:400 msgid "Undefined program name.\n" msgstr "Niezdefiniowana nazwa programu.\n" #: quota_nld.c:405 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:424 #, 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:430 #, 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:437 #, c-format msgid "Could not close PID file '%s'.\n" msgstr "Nie udaÅ‚o siÄ™ zamknąć pliku PID-u '%s'.\n" #: quota_nld.c:467 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:469 #, c-format msgid "Could not store my PID %jd.\n" msgstr "Nie udaÅ‚o siÄ™ zapisać wÅ‚asnego PID-u %jd.\n" #: repquota.c:50 #, 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" "-s, --human-readable show numbers in human friendly units (MB, " "GB, ...)\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 " "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:152 msgid "Repquota cannot report through RPC calls.\n" msgstr "repquota nie może raportować poprzez wywoÅ‚ania RPC.\n" #: repquota.c:156 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:348 msgid "User" msgstr "Użytkownik" #: repquota.c:350 msgid "Group" msgstr "Grupa" #: repquota.c:353 #, c-format msgid "*** Report for %s quotas on device %s\n" msgstr "*** Raport dla limitów %s na urzÄ…dzeniu %s\n" #: repquota.c:362 msgid "Space" msgstr "miejsca" #: repquota.c:364 msgid "Block" msgstr "bloków" #: repquota.c:365 #, 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:366 #, c-format msgid " %s limits File limits\n" msgstr " Limity %-7s Limity plików\n" #: repquota.c:367 #, 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:362 #, 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:366 msgid "Continue checking assuming version from command line?" msgstr "Kontynuować sprawdzanie przy zaÅ‚ożeniu wersji podanej z linii poleceÅ„?" #: quotacheck_v2.c:372 msgid "Headers checked.\n" msgstr "Nagłówki sprawdzone.\n" #: quotacheck_v2.c:388 #, c-format msgid "Do not know how to buffer format %d\n" msgstr "Nie wiem jak buforować format %d\n" #: quotacheck_v2.c:398 #, 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:406 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:414 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:417 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:84 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:95 msgid "XFS quota allowed only on XFS filesystem.\n" msgstr "Format limitów XFS dozwolony tylko na systemie plików XFS.\n" #: quotaio.c:109 msgid "Quota not supported by the filesystem.\n" msgstr "Limity nie sÄ… obsÅ‚ugiwane przez ten system plików.\n" #: quotaio.c:129 msgid "Cannot find any quota file to work on.\n" msgstr "Nie znaleziono żadnego pliku limitów do operowania na nim.\n" #: quotaio.c:134 msgid "Quota file not found or has wrong format.\n" msgstr "Pliku limitów nie znaleziono lub ma zÅ‚y format.\n" #: quotaio.c:144 #, 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:175 #, c-format msgid "Cannot initialize quota on %s: %s\n" msgstr "Nie można zainicjować limitów na %s: %s\n" #: quotaio.c:202 #, 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:212 #, 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:222 #, c-format msgid "Cannot create new quotafile %s: %s\n" msgstr "Nie można utworzyć nowego pliku limitów %s: %s\n" #: quotaio.c:296 #, 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:302 #, 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:22 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:26 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:76 quotaio_v1.c:308 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:214 #, 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:217 #, 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:219 quotaio_xfs.c:234 msgid "ON" msgstr "WÅÄ„CZONE" #: quotaio_xfs.c:219 quotaio_xfs.c:234 msgid "OFF" msgstr "WYÅÄ„CZONE" #: quotaio_xfs.c:221 quotaio_xfs.c:225 #, c-format msgid "Accounting: %s; Enforcement: %s\n" msgstr "Podliczanie: %s; Wymuszanie: %s\n" #: quotaio_xfs.c:237 quotaio_xfs.c:241 #, c-format msgid "Accounting [ondisk]: %s; Enforcement [ondisk]: %s\n" msgstr "Podliczanie [na dysku]: %s; Wymuszanie [na dysku]: %s\n" #: quotaio_xfs.c:250 quotaio_xfs.c:259 #, c-format msgid "Inode: none\n" msgstr "I-wÄ™zeÅ‚: żaden\n" #: quotaio_xfs.c:252 quotaio_xfs.c:261 #, c-format msgid "Inode: #%llu (%llu blocks, %u extents)\n" msgstr "I-wÄ™zeÅ‚: #%llu (%llu bloków, %u ekstentów)\n" #: quotaon.c:66 #, c-format msgid "" "Usage:\n" "\t%s [-guvp] [-F quotaformat] [-x state] -a\n" "\t%s [-guvp] [-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, --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:79 msgid "turn quotas off for all filesystems" msgstr "wyłączenie limitów na wszystkich systemach plików" #: quotaon.c:80 msgid "turn quotas on for all filesystems" msgstr "włączenie limitów na wszystkich systemach plików" #: quotaon.c:141 msgid "Cannot turn on/off quotas via RPC.\n" msgstr "Nie można włączyć/wyłączyć limitów przez RPC.\n" #: quotaon.c:188 #, c-format msgid "set root_squash on %s: %s\n" msgstr "ustawianie root_squash na %s: %s\n" #: quotaon.c:192 #, c-format msgid "%s: %s root_squash turned off\n" msgstr "%s: wyłączono %s root_squash\n" #: quotaon.c:194 #, c-format msgid "%s: %s root_squash turned on\n" msgstr "%s: włączono %s root_squash\n" #: quotaon.c:212 #, c-format msgid "quotactl on %s [%s]: %s\n" msgstr "quotactl na %s [%s]: %s\n" #: quotaon.c:215 #, c-format msgid "%s [%s]: %s quotas turned off\n" msgstr "%s [%s]: limity %s wyłączone\n" #: quotaon.c:228 #, c-format msgid "cannot find %s on %s [%s]\n" msgstr "nie można znaleźć %s na %s [%s]\n" #: quotaon.c:230 #, c-format msgid "using %s on %s [%s]: %s\n" msgstr "użycie %s na %s [%s]: %s\n" #: quotaon.c:232 msgid "Maybe create new quota files with quotacheck(8)?\n" msgstr "Może utworzyć nowe pliki limitów przez quotacheck(8)?\n" #: quotaon.c:234 msgid "Quota format not supported in kernel.\n" msgstr "Format limitów nie obsÅ‚ugiwany przez jÄ…dro.\n" #: quotaon.c:237 #, c-format msgid "%s [%s]: %s quotas turned on\n" msgstr "%s [%s]: limity %s włączone\n" #: quotaon.c:277 msgid "Cannot change state of GFS2 quota.\n" msgstr "Nie można zmienić stanu limitów GFS2.\n" #: quotaon.c:281 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:306 #, 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:311 #, 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:342 #, c-format msgid "%s quota on %s (%s) is %s\n" msgstr "Limity %s na %s (%s) sÄ… %s\n" #: quotaon.c:343 msgid "on" msgstr "włączone" #: quotaon.c:343 msgid "off" msgstr "wyłączone" #: quotaon.c:359 #, c-format msgid "Name must be quotaon or quotaoff not %s\n" msgstr "NazwÄ… musi być quotaon, lub quotaoff, nie %s\n" #: quotaon.c:365 #, c-format msgid "Required format %s not supported by kernel.\n" msgstr "Wymagany format %s nie obsÅ‚ugiwany przez jÄ…dro.\n" #: quotaon.c:367 msgid "Warning: No quota format detected in the kernel.\n" msgstr "Uwaga: Nie wykryto formatu limitów w jÄ…drze.\n" #: quotaon.c:374 #, 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:62 quotaon_xfs.c:82 #, 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:66 #, 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:76 #, 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:87 #, c-format msgid "Enabling %s quota enforcement on %s\n" msgstr "Włączanie wymuszania limitów %s na %s\n" #: quotaon_xfs.c:90 #, 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:95 #, c-format msgid "Disabling %s quota accounting on %s\n" msgstr "Wyłączanie podliczania limitów %s na %s\n" #: quotaon_xfs.c:99 #, 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:108 #, 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:113 #, 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:118 #, 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:124 msgid "and accounting " msgstr "i podliczania " #: quotaon_xfs.c:125 #, 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:131 #, 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:146 #, c-format msgid "quotactl on %s: %s\n" msgstr "quotactl na %s: %s\n" #: quotaon_xfs.c:150 #, c-format msgid "%s: %s quotas turned off\n" msgstr "%s: limity %s wyłączone\n" #: quotaon_xfs.c:152 #, c-format msgid "%s: %s quotas turned on\n" msgstr "%s: limity %s włączone\n" #: quotaon_xfs.c:166 #, c-format msgid "Failed to delete quota: %s\n" msgstr "Nie udaÅ‚o siÄ™ usunąć limitów: %s\n" #: quotaon_xfs.c:171 #, c-format msgid "%s: deleted %s quota blocks\n" msgstr "%s: usuniÄ™to bloki limitów %s\n" #: quotaon_xfs.c:224 #, c-format msgid "Invalid argument \"%s\"\n" msgstr "Błędny argument \"%s\"\n" #: quotaops.c:108 #, c-format msgid "%s (uid %d): Permission denied\n" msgstr "%s (uid %d): Brak uprawnieÅ„\n" #: quotaops.c:120 #, c-format msgid "%s (gid %d): gid set allocation (%d): %s\n" msgstr "%s (gid %d): przydzielenie zbioru gid (%d): %s\n" #: quotaops.c:131 #, 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:142 #, c-format msgid "%s (gid %d): Permission denied\n" msgstr "%s (gid %d): Brak uprawnieÅ„\n" #: quotaops.c:158 #, 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:183 #, 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:232 msgid "Too many parameters to editor.\n" msgstr "Zbyt dużo parametrów dla edytora.\n" #: quotaops.c:240 #, c-format msgid "Cannot exec %s\n" msgstr "Nie można uruchomić %s\n" #: quotaops.c:259 quotaops.c:431 #, c-format msgid "Cannot duplicate descriptor of file to write to: %s\n" msgstr "Nie można powielić deskryptora pliku do zapisu: %s\n" #: quotaops.c:261 #, c-format msgid "Disk quotas for %s %s (%cid %d):\n" msgstr "Limity dyskowe %s %s (%cid %d):\n" #: quotaops.c:265 #, 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:298 #, 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:301 #, 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:322 quotaops.c:473 #, c-format msgid "Cannot duplicate descriptor of temp file: %s\n" msgstr "Nie można powielić deskryptora pliku tymczasowego: %s\n" #: quotaops.c:336 #, c-format msgid "" "Bad format:\n" "%s\n" msgstr "" "ZÅ‚y format:\n" "%s\n" #: quotaops.c:342 #, fuzzy, c-format msgid "Bad block usage: %s: %s\n" msgstr "Nie można odczytać bloku %u: %s\n" #: quotaops.c:349 #, fuzzy, c-format msgid "Bad block soft limit: %s: %s\n" msgstr "Błędny miÄ™kki limit bloków" #: quotaops.c:356 #, fuzzy, c-format msgid "Bad block hard limit: %s: %s\n" msgstr "Błędny twardy limit bloków" #: quotaops.c:363 #, fuzzy, c-format msgid "Bad inode usage: %s: %s\n" msgstr "nie można otworzyć %s: %s\n" #: quotaops.c:370 #, fuzzy, c-format msgid "Bad inode soft limit: %s: %s\n" msgstr "Błędny miÄ™kki limit i-wÄ™złów" #: quotaops.c:377 #, fuzzy, c-format msgid "Bad inode hard limit: %s: %s\n" msgstr "Błędny twardy limit i-wÄ™złów" #: quotaops.c:433 #, 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:435 quotaops.c:539 #, 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:437 #, 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:442 quotaops.c:448 quotaops.c:491 quotaops.c:504 setquota.c:271 #: setquota.c:277 msgid "unset" msgstr "nie ustawiona" #: quotaops.c:444 quotaops.c:450 msgid "0seconds" msgstr "0 sekund" #: quotaops.c:446 quotaops.c:452 quotasys.c:364 #, c-format msgid "%useconds" msgstr "%u sekund" #: quotaops.c:487 quotaops.c:587 #, c-format msgid "" "bad format:\n" "%s\n" msgstr "" "zÅ‚y format:\n" "%s\n" #: quotaops.c:498 quotaops.c:593 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:535 #, c-format msgid "Cannot duplicate descriptor of file to edit: %s\n" msgstr "Nie można powielić deskryptora pliku do edycji: %s\n" #: quotaops.c:537 #, 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:540 #, 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" #: quotaops.c:566 #, c-format msgid "Cannot reopen temp file: %s\n" msgstr "Nie można ponownie otworzyć pliku tymczasowego: %s\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:55 #, c-format msgid "" "Usage:\n" " setquota [-u|-g] %1$s[-F quotaformat] <user|group>\n" "\t<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|" "<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] <-p protouser|protogroup> <user|" "group> -a|<filesystem>...\n" " setquota [-u|-g] %1$s[-F quotaformat] -b [-c] -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" "\n" "-u, --user set limits for user\n" "-g, --group set limits for group\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\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:72 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:75 msgid "" "-t, --edit-period edit grace period\n" "-T, --edit-times edit grace times for user/group\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:79 edquota.c:101 quota.c:111 #, c-format msgid "Bugs to: %s\n" msgstr "Błędy na adres: %s\n" #: setquota.c:90 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" #: setquota.c:103 setquota.c:116 #, fuzzy, c-format msgid "%s: %s: %s\n" msgstr "%s: %s\n" #: setquota.c:212 msgid "Group and user quotas cannot be used together.\n" msgstr "Limity grupy i użytkownika nie mogÄ… być użyte razem.\n" #: setquota.c:216 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:220 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:224 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:228 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:232 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:255 msgid "Bad block softlimit" msgstr "Błędny miÄ™kki limit bloków" #: setquota.c:256 msgid "Bad block hardlimit" msgstr "Błędny twardy limit bloków" #: setquota.c:257 msgid "Bad inode softlimit" msgstr "Błędny miÄ™kki limit i-wÄ™złów" #: setquota.c:258 msgid "Bad inode hardlimit" msgstr "Błędny twardy limit i-wÄ™złów" #: setquota.c:264 setquota.c:276 msgid "Bad block grace time" msgstr "Błędny okres pobÅ‚ażliwoÅ›ci dla bloków" #: setquota.c:265 setquota.c:282 msgid "Bad inode grace time" msgstr "Błędny okres pobÅ‚ażliwoÅ›ci dla i-wÄ™złów" #: setquota.c:288 msgid "Mountpoint not specified.\n" msgstr "Nie podano punktu montowania.\n" #: setquota.c:345 #, c-format msgid "Line %d too long.\n" msgstr "Linia %d zbyt dÅ‚uga.\n" #: setquota.c:357 #, c-format msgid "Cannot parse input line %d.\n" msgstr "Nie można przetworzyć linii wejÅ›cia %d.\n" #: setquota.c:359 setquota.c:367 setquota.c:376 setquota.c:385 setquota.c:394 #: setquota.c:403 msgid "Exitting.\n" msgstr "ZakoÅ„czenie.\n" #: setquota.c:360 setquota.c:368 setquota.c:377 setquota.c:386 setquota.c:395 #: setquota.c:404 msgid "Skipping line.\n" msgstr "Pomijanie linii.\n" #: setquota.c:365 #, 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:373 #, 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:382 #, 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:391 #, 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:400 #, 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:443 #, 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:465 #, 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:469 #, 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:472 #, 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:100 #, c-format msgid "user %s does not exist.\n" msgstr "użytkownik %s nie istnieje.\n" #: quotasys.c:129 #, c-format msgid "group %s does not exist.\n" msgstr "grupa %s nie istnieje.\n" #: quotasys.c:231 #, 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:258 #, 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:320 quota.c:290 msgid "none" msgstr "brak" #: quotasys.c:352 #, c-format msgid "%ddays" msgstr "%d dni" #: quotasys.c:354 #, c-format msgid "%02d:%02d" msgstr "%02d:%02d" #: quotasys.c:366 #, c-format msgid "%uminutes" msgstr "%u minut" #: quotasys.c:368 #, c-format msgid "%uhours" msgstr "%u godzin" #: quotasys.c:370 #, c-format msgid "%udays" msgstr "%u dni" #: quotasys.c:379 msgid "second" msgstr "sekunda" #: quotasys.c:379 msgid "seconds" msgstr "sekund" #: quotasys.c:381 msgid "minute" msgstr "minuta" #: quotasys.c:381 msgid "minutes" msgstr "minut" #: quotasys.c:383 msgid "hour" msgstr "godzina" #: quotasys.c:383 msgid "hours" msgstr "godzin" #: quotasys.c:385 msgid "day" msgstr "dzieÅ„" #: quotasys.c:385 msgid "days" msgstr "dni" #: quotasys.c:434 msgid "Integer overflow while parsing space number." msgstr "" #: quotasys.c:436 msgid "K" msgstr "" #: quotasys.c:438 msgid "M" msgstr "" #: quotasys.c:440 msgid "G" msgstr "" #: quotasys.c:442 msgid "T" msgstr "" #: quotasys.c:445 msgid "Unknown space binary unit. Valid units are K, M, G, T." msgstr "" #: quotasys.c:449 msgid "Integer overflow while interpreting space unit." msgstr "" #: quotasys.c:489 msgid "Integer overflow while parsing number." msgstr "" #: quotasys.c:493 msgid "k" msgstr "" #: quotasys.c:495 msgid "m" msgstr "" #: quotasys.c:497 msgid "g" msgstr "" #: quotasys.c:499 msgid "t" msgstr "" #: quotasys.c:502 msgid "Unknown decimal unit. Valid units are k, m, g, t." msgstr "" #: quotasys.c:506 msgid "Integer overflow while interpreting decimal unit." msgstr "" #: quotasys.c:660 #, 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:806 msgid "Not all specified mountpoints are using quota.\n" msgstr "Nie wszystkie podane punkty montowania używajÄ… limitów.\n" #: quotasys.c:820 #, c-format msgid "Error while releasing file on %s\n" msgstr "Błąd podczas zwalniania pliku na %s\n" #: quotasys.c:879 #, c-format msgid "Cannot create set for sigaction(): %s\n" msgstr "Nie można utworzyć zbioru dla sigaction(): %s\n" #: quotasys.c:882 #, c-format msgid "Cannot set signal handler: %s\n" msgstr "Nie można ustawić obsÅ‚ugi sygnaÅ‚u: %s\n" #: quotasys.c:935 #, c-format msgid "Cannot reset signal handler: %s\n" msgstr "Nie można przywrócić obsÅ‚ugi sygnaÅ‚u: %s\n" #: quotasys.c:1074 msgid "Cannot open any file with mount points.\n" msgstr "Nie można otworzyć żadnego pliku z punktami montowania.\n" #: quotasys.c:1092 #, c-format msgid "Cannot get device name for %s\n" msgstr "Nie można uzyskać nazwy urzÄ…dzenia dla %s\n" #: quotasys.c:1151 #, 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:1157 #, c-format msgid "Cannot statfs() %s: %s\n" msgstr "Nie można wykonać statfs() %s: %s\n" #: quotasys.c:1169 #, 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:1174 #, 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:1184 #, c-format msgid "Cannot stat() mountpoint %s: %s\n" msgstr "Nie można wykonać stat() na punkcie montowania %s: %s\n" #: quotasys.c:1253 #, 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:1257 #, 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:1265 #, 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:1275 #, 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:1281 #, c-format msgid "Cannot resolve path %s: %s\n" msgstr "Nie można rozwiÄ…zać Å›cieżki %s: %s\n" #: quotasys.c:1292 #, c-format msgid "Cannot find mountpoint for device %s\n" msgstr "Nie można znaleźć punktu montowania dla urzÄ…dzenia %s\n" #: quotasys.c:1298 #, 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:1306 msgid "No correct mountpoint specified.\n" msgstr "Nie podano poprawnego punktu montowania.\n" #: quotasys.c:1361 #, 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:88 #, 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:99 #, 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:146 #, c-format msgid "Illegal port number: %s\n" msgstr "Błędny numer portu: %s\n" #: rquota_svc.c:153 #, 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:183 #, 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:190 #, 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:205 #, c-format msgid "Denied access to host %s\n" msgstr "Odrzucono próbÄ™ dostÄ™pu z hosta %s\n" #: rquota_svc.c:293 rquota_svc.c:379 msgid "unable to free arguments\n" msgstr "nie można usunąć argumentów\n" #: rquota_svc.c:402 #, 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:454 msgid "cannot create udp service.\n" msgstr "nie można utworzyć usÅ‚ugi UDP.\n" #: rquota_svc.c:458 msgid "unable to register (RQUOTAPROG, RQUOTAVERS, UDP).\n" msgstr "nie można zarejestrować (RQUOTAPROG, RQUOTAVERS, UDP).\n" #: rquota_svc.c:462 msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n" msgstr "nie można zarejestrować (RQUOTAPROG, EXT_RQUOTAVERS, UDP).\n" #: rquota_svc.c:469 msgid "cannot create TCP service.\n" msgstr "nie można utworzyć usÅ‚ugi TCP.\n" #: rquota_svc.c:473 msgid "unable to register (RQUOTAPROG, RQUOTAVERS, TCP).\n" msgstr "nie można zarejestrować (RQUOTAPROG, RQUOTAVERS, TCP).\n" #: rquota_svc.c:477 msgid "unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" msgstr "nie można zarejestrować (RQUOTAPROG, EXT_RQUOTAVERS, TCP).\n" #: rquota_svc.c:486 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:42 #, c-format msgid "Cannot create socket: %s\n" msgstr "Nie można utworzyć gniazda: %s\n" #: svc_socket.c:49 #, c-format msgid "Cannot set socket options: %s\n" msgstr "Nie można ustawić opcji gniazda: %s\n" #: svc_socket.c:84 #, c-format msgid "Cannot bind to given 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:49 #, c-format msgid "XFS Quota Manager dquot statistics\n" msgstr "Statystyki dquot ZarzÄ…dcy Limitów na XFS\n" #: xqmstats.c:50 #, c-format msgid " reclaims: %u\n" msgstr " poprawki: %u\n" #: xqmstats.c:51 #, c-format msgid " missed reclaims: %u\n" msgstr " chybione poprawki: %u\n" #: xqmstats.c:52 #, c-format msgid " dquot dups: %u\n" msgstr " duplikaty dquot: %u\n" #: xqmstats.c:53 #, c-format msgid " cache misses: %u\n" msgstr " chybienia bufora: %u\n" #: xqmstats.c:54 #, c-format msgid " cache hits: %u\n" msgstr " trafienia bufora: %u\n" #: xqmstats.c:55 #, c-format msgid " dquot wants: %u\n" msgstr " żądania dquot: %u\n" #: xqmstats.c:56 #, c-format msgid " shake reclaims: %u\n" msgstr " poprawki shake: %u\n" #: xqmstats.c:57 #, c-format msgid " inact reclaims: %u\n" msgstr " poprawki inact: %u\n" #: xqmstats.c:62 #, 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:81 #, 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 [-u|g] [-F formatname] [-f filesystem] -t\n" "\tedquota [-u|g] [-F formatname] [-f filesystem] -T username|groupname ...\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:85 msgid "" "\n" "-u, --user edit user data\n" "-g, --group edit group data\n" msgstr "" "\n" "-u, --user zmiana danych użytkownika\n" "-g, --group zmiana danych grupy\n" #: edquota.c:89 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:92 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:183 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:187 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:205 #, 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:211 msgid "fsname mismatch\n" msgstr "Nazwa systemu plików siÄ™ nie zgadza\n" #: edquota.c:255 msgid "No filesystems with quota detected.\n" msgstr "Nie wykryto systemów plików z limitami.\n" #: edquota.c:271 #, c-format msgid "Cannot create temporary file: %s\n" msgstr "Nie można utworzyć pliku tymczasowego: %s\n" #: edquota.c:276 #, 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:283 msgid "Cannot write grace times to file.\n" msgstr "Nie można zapisać okresów pobÅ‚ażliwoÅ›ci do pliku.\n" #: edquota.c:288 edquota.c:307 edquota.c:340 edquota.c:359 #, fuzzy msgid "Cannot stat file with times.\n" msgstr "Nie można otworzyć żadnego pliku z punktami montowania.\n" #: edquota.c:294 msgid "Error while editing grace times.\n" msgstr "Błąd podczas edycji okresów pobÅ‚ażliwoÅ›ci.\n" #: edquota.c:305 edquota.c:357 msgid "Cannot reopen!" msgstr "Nie można ponownie otworzyć!" #: edquota.c:315 msgid "Failed to parse grace times file.\n" msgstr "Analiza pliku okresów pobÅ‚ażliwoÅ›ci nie powiodÅ‚a siÄ™.\n" #: edquota.c:325 #, 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:328 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:334 msgid "Cannot write quotas to file.\n" msgstr "Nie można zapisać limitów do pliku.\n" #: edquota.c:346 msgid "Error while editing quotas.\n" msgstr "Błąd podczas edycji limitów.\n" #: edquota.c:368 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:374 msgid "Cannot read quotas from file.\n" msgstr "Nie można odczytać limitów z pliku.\n" #: quota.c:85 msgid "Usage: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat]\n" msgstr "SkÅ‚adnia: quota [-guqvswim] [-l | [-Q | -A]] [-F format]\n" #: quota.c:86 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:87 msgid "\tquota [-qvswim] [-l | [-Q | -A]] [-F quotaformat] -g groupname ...\n" msgstr "\tquota [-qvswim] [-l | [-Q | -A]] [-F format] -g grupa ...\n" #: quota.c:88 msgid "\tquota [-qvswugQm] [-F quotaformat] -f filesystem ...\n" msgstr "\tquota [-qvswugQm] [-F format] -f system-plików ...\n" #: quota.c:89 #, fuzzy msgid "" "\n" "-u, --user display quota for user\n" "-g, --group display quota for group\n" "-q, --quiet print more terse message\n" "-v, --verbose print more verbose message\n" "-s, --human-readable display numbers in human friendly units (MB, " "GB...)\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 " "filesystems\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:120 msgid "space" msgstr "miejsce" #: quota.c:122 msgid "blocks" msgstr "bloki" #: quota.c:124 #, c-format msgid "Disk quotas for %s %s (%cid %u): %s\n" msgstr "Ograniczenia dyskowe %s %s (%cid %u): %s\n" #: quota.c:127 msgid "Filesystem" msgstr "System plików" #: quota.c:128 quota.c:129 msgid "quota" msgstr "miÄ™kki" #: quota.c:128 quota.c:129 msgid "limit" msgstr "twardy" #: quota.c:128 quota.c:129 msgid "grace" msgstr "pobÅ‚." #: quota.c:129 msgid "files" msgstr "pliki" #: quota.c:201 msgid "File limit reached on" msgstr "Twardy limit plików osiÄ…gniÄ™ty na" #: quota.c:207 msgid "In file grace period on" msgstr "Okres pobÅ‚ażliwoÅ›ci dla plików na" #: quota.c:211 msgid "Over file quota on" msgstr "MiÄ™kki limit dla plików przekroczony na" #: quota.c:217 msgid "Block limit reached on" msgstr "Twardy limit bloków osiÄ…gniÄ™ty na" #: quota.c:223 msgid "In block grace period on" msgstr "Okres pobÅ‚ażliwoÅ›ci dla bloków na" #: quota.c:227 msgid "Over block quota on" msgstr "MiÄ™kki limit dla bloków przekroczony na" #: quota.c:396 #, 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:403 msgid "No filesystem specified.\n" msgstr "Nie podano systemu plików.\n" #: quota.c:411 #, c-format msgid "Gid set allocation (%d): %s\n" msgstr "Przydzielenie zbioru gid (%d): %s\n" #: quota.c:417 #, c-format msgid "getgroups(): %s\n" msgstr "getgroups(): %s\n" #: common.c:124 #, c-format msgid "Quota utilities version %s.\n" msgstr "NarzÄ™dzia Quota w wersji %s.\n" #: common.c:125 #, c-format msgid "Compiled with:%s\n" msgstr "Skompilowano z:%s\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.03/po/boldquot.sed��������������������������������������������������������������������������0000644�0001750�0000144�00000000331�12437305024�012447� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/po/en@quot.header������������������������������������������������������������������������0000644�0001750�0000144�00000002263�12437305024�012714� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/po/pl.gmo��������������������������������������������������������������������������������0000644�0001750�0000144�00000214605�12634316466�011266� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����û�����ô��¥��Ì������`*��3���a*��D���•*��C���Ú*��6���+��@���U+��\���–+�����ó+��Á��,����Ñ-��=���b/����� /��K���¼/��Y���0��C���b0�����¦0�����½0�����Ô0�����ë0�����1�����1�����01�����G1�����^1�����d1��B���k1�� ���®1�� ���¸1�� ���Â1�����Ð1�����×1�� ���Ú1�� ���è1�����ò1��0���2��)���C2�����m2�����2�����¬2�����Ê2�� ���å2�����3����� 3�����(3�����B3�����[3�����z3��0���˜3�����É3�����æ3�����í3�� ���õ3�� ���ÿ3��&��� 4��&���04��7��W4��„���6��€���7��ä���•7�����z8��2���ƒ8�� ���¶8��&���×8�����þ8��9���9��8���X9��"���‘9��-���´9�����â9�����÷9����� :��G���:�����g:�����w:�����Œ:����� :�����´:��A���Î:��7���;��3���H;�����|;��!���‚;�����¤;�� ���¼;��+���Ç;�����ó;�� ��� <�� ���<��-���#<��5���Q<��!���‡<��-���©<��*���×<��#���=��#���&=��?���J=��"���Š=��%���­=��"���Ó=��.���ö=��4���%>��#���Z>�����~>��&���–>�����½>��!���×>��A���ù>��Q���;?��6���?��0���Ä?��4���õ?��-���*@�� ���X@�����y@�����‰@��*���¢@��5���Í@��'���A��.���+A��M���ZA��%���¨A��9���ÎA��7���B��&���@B�����gB��4���xB�����­B��<���ÌB����� C��8���#C�� ���\C��"���}C��(��� C��1���ÉC��)���ûC��*���%D��!���PD�����rD��O���ŽD��*���ÞD��/��� E��#���9E��"���]E��&���€E�����§E��*���»E��(���æE�����F��/���(F��"���XF��*���{F��%���¦F�����ÌF�����âF������G��/���G��3���MG�����G��2���›G��.���ÎG��)���ýG��%���'H��.���MH��(���|H��-���¥H��*���ÓH�����þH�����I��2���;I��G���nI��©���¶I��V���`J��.���·J��)���æJ�����K�����-K�� ���<K��&���]K�����„K��&��� K��2���ÇK��*���úK��8���%L��1���^L�����L�����¯L��/���ÎL�����þL�����M��D���;M�����€M��3���ŸM��2���ÓM��$���N�� ���+N�����LN��C���dN��$���¨N��T���ÍN��S���"O��#���vO�����šO�����¶O��"���ÓO��-���öO�����$P��$���DP�����iP��$���‡P�����¬P�����ËP�����çP��5���ùP�����/Q��%���BQ�����hQ�����ˆQ��!���¦Q��0���ÈQ�����ùQ��(���R��.���?R�� ���nR�����|R�����–R��H���°R��$���ùR��'���S��!���FS��$���hS��$���S�����²S�����ÒS�����æS��,���T��$���1T��=���VT��!���”T�����¶T�����ÕT�����ÛT��)���ûT�����%U��!���EU�����gU��9���„U��5���¾U��*���ôU��!���V��0���AV��%���rV�����˜V�� ���¨V�����³V��6���ÏV��6���W��"���=W��2���`W��7���“W��3���ËW��6���ÿW�����6X�����GX�� ���]X��L���hX�����µX�����ÏX�����ïX�����Y�����Y��_���<Y��m���œY����� Z��#���'Z��3���KZ�����Z��/���…Z�����µZ��2���ÇZ��‹���úZ��}���†[�����\��n���\��(���‡\�����°\�����É\�����I]�����b]��G���z]�����Â]��'���Ç]�� ���ï]��2���ü]�����/^�����F^�����f^��i���^�� ���ë^�����÷^����� _��,���)_��8���V_��1���_��N���Á_��<���`��#���M`��=���q`�����¯`��(���Ê`��)���ó`��!���a�����?a��$���Ya��5���~a��/���´a��*���äa�����b��1���#b��F���Ub��F���œb�� ���ãb�� ���c�����%c�����Ac�����_c�����{c�����˜c��1���´c�����æc�����d����� d��J��� d��%���Xd�����~d��4���“d��4���Èd�����ýd�����e��9���$e��7���^e��G���–e��2���Þe��G���f��6���Yf��0���f��0���Áf��W���òf��x���Jg��*���Ãg��:���îg��O���)h��ƒ���yh��,���ýh��&���*i��'���Qi��K���yi��S���Åi��D���j�����^j�����{j�����›j��3���»j�����ïj��$��� k�����2k�����Jk��*���ik��,���”k�����Ák��1���Ók��-���l��X���3l�����Œl�����Ÿl��P���¸l����� m�����m��2���+m�����^m��;���dm��/��� m��J���Ðm�����n��.���3n��(���bn��4���‹n��0���Àn�����ñn��I���o��H���[o��1���¤o��2���Öo��2��� p��(���<p�����ep��(���~p��$���§p��N���Ìp�����q��Ê���1q��!���üq��Z��r����yt��û��˜u����”y��(���˜|��ì��Á|��q��®~��j�� €��;���‹�����Ç����Ì��ß��é…��N���ɇ��5���ˆ��5���Nˆ��.���„ˆ��N���³ˆ��)���‰��M���,‰��8���z‰�����³‰��O���»‰��)��� Š��6���5Š��$���lŠ��1���‘Š��#���Ê��*���çŠ��$���‹��'���7‹��<���_‹��¥���œ‹��X���BŒ�����›Œ�����«Œ�����»Œ�����ÏŒ�����äŒ���������� �����%�����A�����\��I���p��C���º��C���þ��A���BŽ��A���„Ž�����ÆŽ�����ÊŽ�����ÏŽ��.���ÕŽ�������$���!��%���F��5���l��4���¢�����×�����ê�����þ�������7���!�����Y�����j�����{�����‘�����§�����¼�����Ñ�����×�����Ý��5���÷��1���-‘�����_‘�����d‘�����j‘��N���p‘�����¿‘�����Æ‘�����Α�����Ó‘�����ב�����Ú‘�� ���ù‘�����’����� ’�����%’�����9’�����O’�����V’�����^’�����y’�����’��#���‘’��"���µ’�����Ø’��6���ò’��6���)“��2���`“��2���““�� ���Æ“�����Г�����æ“�����ì“�����ñ“����� ”��q��#”��K���••��;���á•��A���–��5���_–��D���•–��l���Ú–��&���G—����n—��Õ��t™��A���J›�����Œ›��W���¨›��`����œ��W���aœ�����¹œ�����Òœ�����ëœ���������������8�����Q�����j�����ƒ�����‰��H����� ���Ù�� ���ã�� ���í�����û�����ž�� ���ž�� ���ž�����ž��=���;ž��/���yž�����©ž�����Çž�����çž�����Ÿ��9���#Ÿ��2���]Ÿ�����Ÿ�����˜Ÿ�����³Ÿ�����ÍŸ�����íŸ��;���  �� ���H �����i �� ���p �����z �� ���ƒ ��-��� ��-���» ��‘��é ��“���{£��’���¤����¢¤�����¾¥��6���Ç¥�� ���þ¥��)���¦��)���I¦��?���s¦��J���³¦��4���þ¦��6���3§��+���j§�����–§�����´§��Y���Ó§�����-¨��/���>¨��!���n¨��"���¨�����³¨��J���Ѩ��A���©��K���^©�����ª©��+���²©�����Þ©�� ���õ©��S���ÿ©��$���Sª�����xª�����ª��,���£ª��G���Ъ��-���«��K���F«��9���’«��&���Ì«��)���ó«��G���¬��)���e¬��3���¬��5���ì��9���ù¬��D���3­��2���x­�� ���«­��0���Ì­��!���ý­��,���®��P���L®��^���®��B���ü®��5���?¯��5���u¯��8���«¯��%���ä¯����� °�����$°��4���D°��G���y°��=���Á°��;���ÿ°��]���;±��:���™±��S���Ô±��G���(²��9���p²�����ª²��E���Ȳ��-���³��V���<³��$���“³��G���¸³��*����´��1���+´��8���]´��<���–´��>���Ó´��?���µ��0���Rµ��/���ƒµ��V���³µ��:��� ¶��=���E¶��3���ƒ¶��+���·¶��;���ã¶�����·��>���<·��;���{·��"���··��7���Ú·��2���¸��?���E¸��6���…¸�� ���¼¸��+���ݸ��+��� ¹��C���5¹��B���y¹��"���¼¹��=���ß¹��>���º��8���\º��8���•º��E���κ��8���»��9���M»��6���‡»��'���¾»��,���æ»��L���¼��U���`¼��æ���¶¼��l���½��=��� ¾��>���H¾��5���‡¾�����½¾��.���ܾ��:��� ¿��(���F¿��2���o¿��X���¢¿��K���û¿��G���GÀ��<���À��*���ÌÀ��&���÷À��E���Á��,���dÁ��6���‘Á��X���ÈÁ��2���!Â��G���TÂ��M���œÂ��>���êÂ��8���)Ã��$���bÃ��V���‡Ã��;���ÞÃ��d���Ä��c���Ä��6���ãÄ��+���Å��#���FÅ��8���jÅ��E���£Å��)���éÅ��.���Æ��'���BÆ��&���jÆ��+���‘Æ��+���½Æ�����éÆ��J���üÆ�����GÇ��'���ZÇ��,���‚Ç��&���¯Ç��-���ÖÇ��A���È��.���FÈ��/���uÈ��8���¥È�����ÞÈ��&���îÈ�����É��h���1É��+���šÉ��2���ÆÉ�� ���ùÉ��)���Ê��"���DÊ��(���gÊ�����Ê��.���£Ê��E���ÒÊ��)���Ë��B���BË��3���…Ë�����¹Ë�����×Ë��1���ÞË��7���Ì��#���HÌ��1���lÌ�� ���žÌ��C���¿Ì��;���Í��8���?Í��&���xÍ��:���ŸÍ��1���ÚÍ����� Î�����Î��&���,Î��R���SÎ��T���¦Î��<���ûÎ��E���8Ï��R���~Ï��C���ÑÏ��N���Ð�����dÐ��$���‚Ð�����§Ð��S���¶Ð��2��� Ñ��.���=Ñ�����lÑ��#���…Ñ��"���©Ñ��i���ÌÑ��u���6Ò��"���¬Ò��2���ÏÒ��@���Ó�����CÓ��9���IÓ�����ƒÓ��C���›Ó��Á���ßÓ��˜���¡Ô�����:Õ��~���NÕ��.���ÍÕ�����üÕ��¦���Ö��%���½Ö��%���ãÖ��S��� ×�� ���]×��/���h×�����˜×��3���«×�����ß×��$���÷×��!���Ø��s���>Ø�����²Ø�����ÂØ�����ÙØ��C���ùØ��B���=Ù��9���€Ù��S���ºÙ��A���Ú��*���PÚ��]���{Ú�����ÙÚ��/���øÚ��:���(Û��)���cÛ�����Û��*���ªÛ��2���ÕÛ��;���Ü��3���DÜ�����xÜ��:���ŒÜ��^���ÇÜ��b���&Ý��*���‰Ý��"���´Ý�����×Ý�����óÝ�����Þ�����/Þ�����KÞ��9���fÞ��*��� Þ�� ���ËÞ�� ���×Þ��P���âÞ��/���3ß�����cß��B���‚ß��B���Åß��)���à��)���2à��L���\à��C���©à��L���íà��@���:á��I���{á��I���Åá��4���â��O���Dâ��_���”â�����ôâ��2���tã��C���§ã��Q���ëã��•���=ä��=���Óä��/���å��6���Aå��m���xå��Y���æå��E���@æ�����†æ��.���¥æ��&���Ôæ��@���ûæ��(���<ç��*���eç��#���ç��+���´ç��7���àç��2���è�����Kè��+���_è��@���‹è��i���Ìè�����6é�����Hé��O���eé�����µé�����Èé��;���Úé�����ê��H���ê��:���gê��S���¢ê�����öê��;��� ë��'���Hë��<���pë��6���­ë��$���äë��U��� ì��c���_ì��B���Ãì��C���í��@���Jí��.���‹í�� ���ºí��1���Ûí��%��� î��P���3î�����„î��ò���šî��+���ï��ç��¹ï����¡ò��£��Áó��µ��eø��0���ü��<��Lü��±��‰þ��À��;��:���ü� ���7�c��C�R��§�P���ú �?���K �C���‹ �2���Ï �P��� �6���S �P���Š �C���Û ���� �n���% �/���” �F���Ä �D��� �/���P �+���€ �=���¬ �0���ê �0����:���L�Ô���‡�X���\����µ����Ä�!���Õ�"���÷�.�������I�"���O�"���r�#���•����¹�M���Ö�S���$�R���x�W���Ë�X���#����|����ƒ� ���‡�>���‘�"���Ð�1���ó�3���%�<���Y�A���–�!���Ø�"���ú�.�������L�>���R�&���‘����¸�)���É�+���ó�)����+���I����u����|����‚�6���š�I���Ñ��������#����*�`���1����’����™����Ÿ� ���¤� ���°� ���»� ���Ü����é����ñ���� ��������4����<�!���C����e����m�5���‚�4���¸� ���í�=����=���L�9���Š�9���Ä����þ�)���� ���1� ���?����L����j��������Ò������*������ø���­�����Ã��M������� �������¼����û����������”���F��€���N���9���P������Í������������������!��*�������4���ä�����������6���H��ì���ö��������������æ��K���ð������„��u�� ��¦��J��·������������´������U��—�������à��2������������������¹��A���V���È��F���E���š���Š���Î������B��ü����������� ���~��m��Ç���`������í������¤���&��6������¶���ˆ��Z������®���Å���������� ��{��� ��†�����������“���ô��Ð�����b��¤��˜������N��r��3�������À��l�����~�������I�����O���n�����œ������h���©���8��w��q��ý�������±���#��©���������������i��‘������ù��A��o���������T���°��§��8�������?���S�������ÿ�������\��T��²���â���������������)��ƒ���ª���‹������]��&�������ó��•�������ç���›���������������à�������…���Ž���=��ò���+������Ú����������������'���e���á�� ���Ù���:������� ��›��(��@��û��������,���ù�������{������–���ñ��ì�����¾��v��¿��;���7���f���Ÿ���'������!���±��s��´�������l���C�������×���®��4��H�������ê���ó���@���é����}���ê��-���Â���^������²��Á��º������������}����¹���-��õ��Ì�����������Õ�����ë�����P�������À���ß����Æ������>��‰���������5�������Ó����� ���˜������e������Ó���<���:������X��2����������·������������Ã���G������Ü������°���\�����µ�� ��k�������’��«��¨����������Ä�������s���ú��p��5��è���|��ˆ���»���O��Œ��Â��a��Y���I��c��³��Z���c����������ƒ��]�������¡���_����������^��� ��Ú������� ���Ò���â��?��������ô�������ã���U���Í������g�������Ü���Þ���Î���D���Û������¸���y��‹�������„���ç��R��Ë���������í���ð���������Ù������/��Ý�������)�����%��0����������W���L��Ž������Ê����������=�������î���å���‚�������S��[��������æ�������×�� ���µ���n��¯�������.��/���õ���$��`��¼���C��½��ª��k��¡��B���0���D������–��M��Ö��3������þ�����������Ø�������Õ��1���³���|���p���������������Ñ�����R�������¯������€������¬���­����É���÷���Ð���È���"���������q���‡��� ����������Ÿ����������7������������������¸��š������‚��«���w���§���á�������;��Ë���Å�������$���j���ã��ž��<����������Ô�����¢��m�������9��Ï���Ê���L���Û��ë���b���X���ß���������a������1�����é�������ï������ž���t��������¬��>�������ñ���Ø��z����,��o���������x��r�������¢���Þ��%���¦���¥���†��j����������ø��"��Ï��Š��Ý������ä��÷��h������Æ�������É������Y������è��J���î����������Ñ��º���x���y������� �������v�������������Q��(�����������•��Ô������d��‘���…��Œ���¶����������—��‰���½���™��ò��”��¾���u�������ú���V������œ���¥������¨��Ä������Q����������Ì������[���f��d�������K������‡������ï��+���»��g������™���£��“��#���Á���å����.�������£���E��’�������W��t������ö��z���G��_���Ö�������¿���Ç��i����������������������� 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 ... � quota [-qvswugQm] [-F quotaformat] -f filesystem ... � Block limits File limits � -u, --user edit user data -g, --group edit group data � Can open directory %s: %s � 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 � %8llu %8llu %8llu� 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 �#%-7d�%-8.8s�%-9s used soft hard grace used soft hard grace �%02d:%02d�%8llu �%d %llu %llu �%ddays�%s�%s (%s) %ss: �%s (%s): �%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 �-t, --edit-period edit grace period -T, --edit-times edit grace times for user/group -h, --help display this help text and exit -V, --version display version information and exit �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 bind to given address: %s �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 socket: %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 of file to edit: %s �Cannot duplicate descriptor of file to write to: %s �Cannot duplicate descriptor of temp file: %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 reopen temp file: %s �Cannot reopen!�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 in config file (line %d), ignoring �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�Group and user quotas cannot be used together. �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. �Line %d too long. Truncating. �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. �Possible error in config file (line %d), ignoring �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 �Unterminated last line, ignoring �Usage: %s [-guvp] [-F quotaformat] [-x state] -a %s [-guvp] [-F quotaformat] [-x state] filesys ... -a, --all %s -f, --off turn quotas off -u, --user operate on user quotas -g, --group operate on group quotas -p, --print-state print whether quotas are on or off -x, --xfs-command=cmd perform XFS quota command -F, --format=formatname operate on specific quota format -v, --verbose print more messages -h, --help display this help text and exit -V, --version display version information and exit �Usage: edquota %1$s[-u] [-F formatname] [-p username] [-f filesystem] username ... edquota %1$s-g [-F formatname] [-p groupname] [-f filesystem] groupname ... edquota [-u|g] [-F formatname] [-f filesystem] -t edquota [-u|g] [-F formatname] [-f filesystem] -T username|groupname ... �Usage: setquota [-u|-g] %1$s[-F quotaformat] <user|group> <block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|<filesystem>... setquota [-u|-g] %1$s[-F quotaformat] <-p protouser|protogroup> <user|group> -a|<filesystem>... setquota [-u|-g] %1$s[-F quotaformat] -b [-c] -a|<filesystem>... setquota [-u|-g] [-F quotaformat] -t <blockgrace> <inodegrace> -a|<filesystem>... setquota [-u|-g] [-F quotaformat] <user|group> -T <blockgrace> <inodegrace> -a|<filesystem>... -u, --user set limits for user -g, --group set limits for group -a, --all set limits for all filesystems --always-resolve always try to resolve name, even if is composed only of digits -F, --format=formatname operate on specific quota format -p, --prototype=protoname copy limits from user/group -b, --batch read limits from standard input -c, --continue-batch continue in input processing in case of an error �Usage: warnquota [-ugsid] [-F quotaformat] [-c configfile] [-q quotatabfile] [-a adminsfile] [filesystem...] -u, --user warn users -g, --group warn groups -s, --human-readable send information in more human friendly units -i, --no-autofs avoid autofs mountpoints -d, --no-details do not send quota information itself -F, --format=formatname use quotafiles of specific format -c, --config=config-file non-default config file -q, --quota-tab=quotatab-file non-default quotatab -a, --admins-file=admins-file non-default admins file -h, --help display this help message and exit -v, --version display version information and exit �Usage: %s [-acfugvViTq] [filesystem...] �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 �Usage: quota [-guqvswim] [-l | [-Q | -A]] [-F quotaformat] �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. �XFS_IOC_FSBULKSTAT ioctl failed: %s �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 create TCP service. �cannot create udp service. �cannot find %s on %s [%s] �cannot open %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 �unable to register (RQUOTAPROG, EXT_RQUOTAVERS, TCP). �unable to register (RQUOTAPROG, EXT_RQUOTAVERS, UDP). �unable to register (RQUOTAPROG, RQUOTAVERS, TCP). �unable to register (RQUOTAPROG, RQUOTAVERS, UDP). �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 POT-Creation-Date: 2015-12-16 18:19+0100 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 ... � quota [-qvswugQm] [-F format] -f system-plików ... � Limity bloków Limity plików � -u, --user zmiana danych użytkownika -g, --group zmiana danych grupy � Nie można otworzyć katalogu %s: %s � 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 � %8llu %8llu %8llu� 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 �#%-7d�%-8.8s�%-9s używ. miÄ™k. twar. pobÅ‚. używ. miÄ™k. twar. pobÅ‚. �%02d:%02d�%8llu �%d %llu %llu �%d dni�%s�%s (%s) %ss: �%s (%s): �%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 �-t, --edit-period zmiana okresu pobÅ‚ażliwoÅ›ci -T, --edit-times zmiana czasów pobÅ‚ażliwoÅ›ci dla użytkownika/grupy -h, --help wyÅ›wietlenie tego opisu i zakoÅ„czenie -V, --version wyÅ›wietlenie informacji o wersji i zakoÅ„czenie �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 przypisać do podanego adresu: %s �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ć gniazda: %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 pliku do edycji: %s �Nie można powielić deskryptora pliku do zapisu: %s �Nie można powielić deskryptora pliku tymczasowego: %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 ponownie otworzyć pliku tymczasowego: %s �Nie można ponownie otworzyć!�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 w pliku konfiguracyjnym (linia %d), zignorowano �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�Limity grupy i użytkownika nie mogÄ… być użyte razem. �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. �Linia %d zbyt dÅ‚uga. UciÄ™to. �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. �Możliwy błąd w pliku konfiguracyjnym (linia %d), zignorowano �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 �NiezakoÅ„czona ostatnia linia, zignorowano �Skladnia: %s [-guvp] [-F format] [-x stan] -a %s [-guvp] [-F format] [-x stan] system-plików ... -a, --all %s -f, --off wyłączenie limitów -u, --user operowanie na limitach użytkowników -g, --group operowanie na limitach grup -p, --print-state wypisanie, czy limity sÄ… włączone czy wyłączone -x, --xfs-command=polecenie wykonanie polecenia dla limitów XFS -F, --format=format operowanie na podanym formacie limitów -v, --verbose wypisywanie wiÄ™kszej liczby komunikatów -h, --help wyÅ›wietlenie tego opisu i zakoÅ„czenie -V, --verbose wyÅ›wietlenie informacji o wersji i zakoÅ„czenie �SkÅ‚adnia: edquota %1$s[-u] [-F format] [-p użytkownik] [-f system-plików] użytkownik ... edquota %1$s-g [-F format] [-p grupa] [-f system-plików] grupa ... edquota [-u|g] [-F format] [-f system-plików] -t edquota [-u|g] [-F format] [-f system-plików] -T użytkownik|grupa ... �SkÅ‚adnia: setquota [-u|-g] %1$s[-F format] <użytkownik|grupa> <miÄ™kki-limit-bloków> <twardy-limit-bloków> <miÄ™kki-limit-iwÄ™złów> <twardy-limit-iwÄ™złów> -a|<system-plików>... setquota [-u|-g] %1$s[-F format] <-p wzorcowy-użytkownik|grupa> <użytkownik|grupa> -a|<system-plików>... setquota [-u|-g] %1$s[-F format] -b [-c] -a|<system-plików>... setquota [-u|-g] [-F format] -t <pobÅ‚-bloki> <pobÅ‚-iwÄ™zÅ‚y> -a|<system-plików>... setquota [-u|-g] [-F format] <użytkownik|grupa> -T <pobÅ‚-bloki> <pobÅ‚-iwÄ™zÅ‚y> -a|<system-plików>... -u, --user ustawienie limitów dla użytkownika -g, --group ustawienie limitów dla grupy -a, --all ustawienie limitów dla wszystkich systemów plików --always-resolve próba rozwiÄ…zania nazwy zawsze, nawet jeÅ›li skÅ‚ada siÄ™ wyłącznie z cyfr -F, --format=nazwa operowanie na podanym formacie limitów -p, --prototype=nazwa skopiowanie limitów od podanego użytkownika/grupy -b, --batch odczyt limitów ze standardowego wejÅ›cia -c, --continue-batch kontynuacja przetwarzania wejÅ›cia po błędzie �SkÅ‚adnia: warnquota [-ugsid] [-F format] [-c plik-konfiguracyjny] [-q plik-quotatab] [-a plik-admins] [system-plików...] -u, --user ostrzeżenie użytkowników -g, --group ostrzeżenie grup -s, --human-readable wysyÅ‚anie informacji w jednostkach bardziej przyjaznych dla czÅ‚owieka -i, --no-autofs pomijanie punktów montowania autofs -d, --no-details bez wysyÅ‚ania informacji o samych limitach -F, --format=format użycie plików limitów o podanym formacie -c, --config=plik inny niż domyÅ›lny plik konfiguracyjny -q, --quota-tab=plik inny niż domyÅ›lny plik quotatab -a, --admins-file=plik inny niż domyÅ›lny plik admins -h, --help wyÅ›wietlenie tego opisu i zakoÅ„czenie -v, --version wyÅ›wietlenie informacji o wersji i zakoÅ„czenie �SkÅ‚adnia: %s [-acfugvViTq] [system-plików...] �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 �SkÅ‚adnia: quota [-guqvswim] [-l | [-Q | -A]] [-F format] �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. �ioctl XFS_IOC_FSBULKSTAT nie powiódÅ‚ siÄ™: %s �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 utworzyć usÅ‚ugi TCP. �nie można utworzyć usÅ‚ugi UDP. �nie można znaleźć %s na %s [%s] �nie można otworzyć %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 �nie można zarejestrować (RQUOTAPROG, EXT_RQUOTAVERS, TCP). �nie można zarejestrować (RQUOTAPROG, EXT_RQUOTAVERS, UDP). �nie można zarejestrować (RQUOTAPROG, RQUOTAVERS, TCP). �nie można zarejestrować (RQUOTAPROG, RQUOTAVERS, UDP). �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.03/po/POTFILES.in���������������������������������������������������������������������������0000644�0001750�0000144�00000001243�12437337010�011701� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 quot.c quot.h 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.03/quotaio_tree.c���������������������������������������������������������������������������0000644�0001750�0000144�00000035207�12252407552�012365� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/config.rpath�����������������������������������������������������������������������������0000755�0001750�0000144�00000035217�12437305023�012025� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /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 <gord@gnu.ai.mit.edu>, 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 <kc5tja@dolphin.openprojects.net> 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=/' <<EOF # How to pass a linker flag through the compiler. wl="$escaped_wl" # Static library suffix (normally "a"). libext="$libext" # Shared library suffix (normally "so"). shlibext="$shlibext" # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct="$hardcode_direct" # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L="$hardcode_minus_L" EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/warnquota.conf.5�������������������������������������������������������������������������0000644�0001750�0000144�00000010410�12234034700�012530� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/rquota_client.h��������������������������������������������������������������������������0000644�0001750�0000144�00000000550�12124521007�012522� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quotatab���������������������������������������������������������������������������������0000644�0001750�0000144�00000000405�12124521007�011242� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/mkinstalldirs����������������������������������������������������������������������������0000755�0001750�0000144�00000006722�12513140311�012312� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # 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: "UTC" # time-stamp-end: "; # UTC" # End: ����������������������������������������������quota-4.03/quotacheck.h�����������������������������������������������������������������������������0000644�0001750�0000144�00000003242�12124521007�012001� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/warnquota.conf���������������������������������������������������������������������������0000644�0001750�0000144�00000006440�12634316110�012377� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# this is an example warnquota.conf # ; ; and # type comments are allowed # and even blank lines # values can be quoted: #MAIL_CMD = "/usr/my/sendmail/instead/sendmail -t" MAIL_CMD = "/bin/echo" FROM = "bas@example.com" # but they don't have to be: SUBJECT = Hey, user, clean up your account! CC_TO = "sysadm@example.com" # 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 = "support@example.com" PHONE = "(123) 456-1111 or (222) 333-4444" # 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 = # If you are using LDAP mail lookups. # host, port, tls, binddn, and bindpw are straight forward. # LDAP_BASEDN is your search base dn # LDAP_SEARCH_ATTRIBUTE is the attr for the value you are looking for # LDAP_MAIL_ATTRIBUTE is the attribute you want used for the mail address # LDAP_DEFAULT_MAIL_DOMAIN is the default domain # if the attribute isn't found # if binddn and bindpw are blank or left out, an anonymous bind is used # # LDAP_MAIL = false # or true if you want to use it # If you have at least LDAP 2.3 installed, you should use LDAP_URI # LDAP_URI = ldaps://my.server:389 # Otherwise you should specify LDAP_HOST and LDAP_PORT # LDAP_HOST = ldap # LDAP_PORT = 389 # LDAP_TLS = false (false|never|allow|try|demand) use StarTLS # false - don't use starTLS # 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 # LDAP_BINDDN = uid=ReadOnlyUser,o=YourOrg # LDAP_BINDPW = YourReadOnlyUserPassword # LDAP_BASEDN = YourSearchBase # LDAP_SEARCH_ATTRIBUTE = uid # LDAP_MAIL_ATTRIBUTE = mailLocalAddress # LDAP_DEFAULT_MAIL_DOMAIN = YourDefaultMailDomain.com # # end of example warnquota.conf file # ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/config.h���������������������������������������������������������������������������������0000644�0001750�0000144�00000006211�12634761210�011126� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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 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 <inttypes.h> header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `ldap' library (-lldap). */ #define HAVE_LIBLDAP 1 /* Define to 1 if you have the <memory.h> header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the <stdint.h> header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the <strings.h> header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the <string.h> header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the <sys/stat.h> header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the <sys/types.h> header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the <unistd.h> header file. */ #define HAVE_UNISTD_H 1 /* Use hosts.allow and hosts.deny for access checking of rpc.rquotad */ /* #undef HOSTS_ACCESS */ /* 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 "/usr/local/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.03" /* 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.03" /* Support for RPC */ #define RPC 1 /* Allow setting of quotas over RPC */ /* #undef RPC_SETQUOTA */ /* 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 /* Version number of package */ #define VERSION "4.03" /* Assume quota mount options for root filesystem */ /* #undef XFS_ROOTHACK */ /* 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.03/dqblk_xfs.h������������������������������������������������������������������������������0000644�0001750�0000144�00000001055�12124521007�011627� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quotaon_xfs.c����������������������������������������������������������������������������0000644�0001750�0000144�00000014427�12124521007�012222� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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, 0), 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 { /* GRPQUOTA */ if (info.qs_flags & XFS_QUOTA_GDQ_ACCT) state = ACCT; if (info.qs_flags & XFS_QUOTA_GDQ_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) { 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) { 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) { 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) 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) { /* only enfd on/off */ xopts |= (type == USRQUOTA) ? XFS_QUOTA_UDQ_ENFD : XFS_QUOTA_GDQ_ENFD; err = xfs_onoff(mnt->me_devname, type, flags, roothack, xopts); } else if (strcmp(xarg, "account") == 0) { xopts |= (type == USRQUOTA) ? XFS_QUOTA_UDQ_ACCT : XFS_QUOTA_GDQ_ACCT; err = xfs_onoff(mnt->me_devname, type, flags, roothack, xopts); } else if (strcmp(xarg, "enforce") == 0) { xopts |= (type == USRQUOTA) ? XFS_QUOTA_UDQ_ENFD : XFS_QUOTA_GDQ_ENFD; err = xfs_onoff(mnt->me_devname, type, flags, roothack, xopts); } else if (strcmp(xarg, "delete") == 0) { xopts |= (type == USRQUOTA) ? XFS_USER_QUOTA : XFS_GROUP_QUOTA; err = xfs_delete(mnt->me_devname, type, flags, roothack, xopts); } else die(1, _("Invalid argument \"%s\"\n"), xarg); return err; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/ABOUT-NLS��������������������������������������������������������������������������������0000644�0001750�0000144�00000113113�12437305023�010734� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Notes on the Free Translation Project ************************************* Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that 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.03/Makefile.am������������������������������������������������������������������������������0000644�0001750�0000144�00000007515�12635010311�011542� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ACLOCAL_AMFLAGS = -I m4 BUILT_SOURCES = rquota.h rquota.c rquota_clnt.c docdir = $(datadir)/doc/@PACKAGE@ doc_DATA = \ README.mailserver \ README.ldap-support \ set_limits_example.c \ doc/quotadoc.sgml \ doc/quotas.ms \ doc/quotas.preformated \ doc/quotas-1.eps rpcsvcdir = $(includedir)/rpcsvc rpcsvc_DATA = \ rquota.h \ rquota.x sysconf_DATA = \ warnquota.conf \ quotatab \ quotagrpadmins man_MANS = \ convertquota.8 \ edquota.8 \ quotagrpadmins.5 \ quotacheck.8 \ quota_nld.8 \ quotaon.8 \ quotastats.8 \ quotasync.1 \ quotatab.5 \ quota.1 \ quot.8 \ repquota.8 \ rpc.rquotad.8 \ rquota.3 \ setquota.8 \ warnquota.conf.5 \ warnquota.8 \ xqmstats.8 CLEANFILES = rquota.c rquota.h rquota_clnt.c SUBDIRS = po EXTRA_DIST = \ $(sysconf_DATA) \ $(doc_DATA) \ $(man_MANS) \ $(rpcsvc_DATA) \ autogen.sh \ Changelog noinst_LIBRARIES = \ libquota.a \ librpcclient.a librpcclient_a_SOURCES = \ rquota.c \ rquota.h \ rquota_client.c \ rquota_client.h \ rquota_clnt.c librpcclient_a_CFLAGS = -Wno-unused if WITH_RPC RPCLIBS = librpcclient.a 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 \ quot \ repquota \ warnquota \ quotastats \ xqmstats \ edquota \ setquota \ convertquota \ rpc.rquotad if WITH_NETLINK sbin_PROGRAMS += \ quota_nld endif quotaon_SOURCES = \ quotaon.c \ quotaon.h \ quotaon_xfs.c quotaon_LDADD = \ libquota.a \ $(RPCLIBS) quotacheck_SOURCES = \ quotacheck.c \ quotacheck.h \ quotacheck_v1.c \ quotacheck_v2.c \ quota_tree.h \ quotaops.c quotacheck_CFLAGS = \ $(EXT2FS_CFLAGS) \ $(COM_ERR_CFLAGS) quotacheck_LDADD = \ libquota.a \ $(EXT2FS_LIBS) \ $(COM_ERR_LIBS) \ $(RPCLIBS) quota_SOURCES = \ quota.c \ quota.h \ quotaops.c \ quotaops.h quota_LDADD = \ libquota.a \ $(RPCLIBS) quotasync_SOURCES = quotasync.c quotasync_LDADD = \ libquota.a \ $(RPCLIBS) quot_SOURCES = \ quot.c \ quot.h quot_LDADD = \ libquota.a \ $(RPCLIBS) repquota_SOURCES = repquota.c repquota_LDADD = \ libquota.a \ $(RPCLIBS) warnquota_SOURCES = warnquota.c warnquota_LDADD = \ libquota.a \ $(LDAP_LIBS) \ $(RPCLIBS) quotastats_SOURCES = \ quotastats.c \ common.c \ common.h \ pot.c \ pot.h xqmstats_SOURCES = \ xqmstats.c \ common.c \ common.h \ pot.c \ pot.h edquota_SOURCES = \ edquota.c \ quotaops.c \ quotaops.h edquota_LDADD = \ libquota.a \ $(RPCLIBS) setquota_SOURCES = \ setquota.c \ quotaops.c \ quotaops.h setquota_LDADD = \ libquota.a \ $(RPCLIBS) convertquota_SOURCES = convertquota.c convertquota_LDADD = \ libquota.a \ $(RPCLIBS) rpc_rquotad_SOURCES = \ rquota_server.c \ rquota_svc.c \ svc_socket.c rpc_rquotad_LDADD = \ libquota.a \ $(WRAP_LIBS) \ $(RPCLIBS) quota_nld_SOURCES = quota_nld.c quota_nld_CFLAGS = \ $(DBUS_CFLAGS) \ $(LIBNL3_CFLAGS) quota_nld_LDADD = \ libquota.a \ $(RPCLIBS) \ $(DBUS_LIBS) \ $(LIBNL3_LIBS) # ------------------ # 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 $@ $< # -------- # 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.03/quotaops.c�������������������������������������������������������������������������������0000644�0001750�0000144�00000040370�12161046104�011524� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1980, 1990 Regents of the University of California. All * rights reserved. * * This code is derived from software contributed to Berkeley by Robert Elz at * The University of Melbourne. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 2. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. 3. All advertising * materials mentioning features or use of this software must display the * following acknowledgement: This product includes software developed by the * University of California, Berkeley and its contributors. 4. Neither the * name of the University nor the names of its contributors may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "config.h" #include <rpc/rpc.h> #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> #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 quiet) { 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], *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); return (struct dquot *)NULL; } break; case GRPQUOTA: if (geteuid() == 0) break; ngroups = sysconf(_SC_NGROUPS_MAX); if (ngroups > NGROUPS) { 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)); return (struct dquot *)NULL; } } 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)); return (struct dquot *)NULL; } 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); return (struct dquot *)NULL; } break; default: break; } #endif if (!(q = handles[i]->qh_ops->read_dquot(handles[i], id))) { /* If rpc.rquotad is not running filesystem might be just without quotas... */ if (errno != ENOENT && (errno != ECONNREFUSED || !quiet)) { int olderrno = 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, strerror(olderrno)); } continue; } 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); setgid(getgid()); setuid(getuid()); 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; } /* * Convert a dquot list to an ASCII file. */ int writeprivs(struct dquot *qlist, int outfd, char *name, int quotatype) { struct dquot *q; FILE *fd; ftruncate(outfd, 0); lseek(outfd, 0, SEEK_SET); if (!(fd = fdopen(dup(outfd), "w"))) die(1, _("Cannot duplicate descriptor of file to write to: %s\n"), strerror(errno)); 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; lseek(infd, 0, SEEK_SET); if (!(fd = fdopen(dup(infd), "r"))) die(1, _("Cannot duplicate descriptor of temp file: %s\n"), strerror(errno)); /* * Discard title lines, then read lines to process. */ fgets(line, sizeof(line), fd); fgets(line, sizeof(line), fd); 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]; ftruncate(outfd, 0); lseek(outfd, 0, SEEK_SET); if (!(fd = fdopen(dup(outfd), "w"))) die(1, _("Cannot duplicate descriptor of file to write to: %s\n"), strerror(errno)); 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; lseek(infd, 0, SEEK_SET); if (!(fd = fdopen(dup(infd), "r"))) die(1, _("Cannot duplicate descriptor of temp file: %s\n"), strerror(errno)); /* * Discard title lines, then read lines to process. */ fgets(line, sizeof(line), fd); fgets(line, sizeof(line), fd); fgets(line, sizeof(line), fd); 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; ftruncate(outfd, 0); lseek(outfd, 0, SEEK_SET); if ((fd = fdopen(dup(outfd), "w")) == NULL) die(1, _("Cannot duplicate descriptor of file to edit: %s\n"), strerror(errno)); 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; lseek(infd, 0, SEEK_SET); if (!(fd = fdopen(dup(infd), "r"))) { errstr(_("Cannot reopen temp file: %s\n"), strerror(errno)); return -1; } /* 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. */ fgets(line, sizeof(line), fd); fgets(line, sizeof(line), fd); fgets(line, sizeof(line), fd); 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.03/aclocal.m4�������������������������������������������������������������������������������0000644�0001750�0000144�00000135224�12635010605�011353� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# generated automatically by aclocal 1.13.4 -*- Autoconf -*- # Copyright (C) 1996-2013 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 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant <scott@netsplit.com>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|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 ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # 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]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then 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 <http://pkg-config.freedesktop.org/>.])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # 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 # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --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 # PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------- # 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 ])# PKG_CHECK_VAR # Copyright (C) 2002-2013 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.13' 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.13.4], [], [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.13.4])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-2013 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], [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 ]) ]) 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-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 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-2013 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-2013 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-2013 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. # 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: # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [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 ]) 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-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 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-2013 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-2013 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-2013 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])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 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-2013 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-2013 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-2013 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-2013 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 <conftest.tar]) AM_RUN_LOG([cat conftest.dir/file]) grep GrepMe conftest.dir/file >/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.03/quotaio_rpc.c����������������������������������������������������������������������������0000644�0001750�0000144�00000003473�12124521007�012200� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 = (~(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.03/rquota.x���������������������������������������������������������������������������������0000644�0001750�0000144�00000006616�12124521007�011215� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/README.ldap-support����������������������������������������������������������������������0000644�0001750�0000144�00000002544�12124521007�013016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������LDAP support for warnquota by James Bourne <jbourne@hardrock.org> 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.03/configure.ac�����������������������������������������������������������������������������0000644�0001750�0000144�00000020325�12635010602�011771� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 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],[03]) 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]) # =========================== # 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 # =============== # 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 cflags # ================ CFLAGS="-D_GNU_SOURCE -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" 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"], [ CFLAGS="$CFLAGS -Werror" ]) # ========= # 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"], [ build_ldap="yes" AC_CHECK_LIB([ldap], [ldap_initialize], [], [ build_ldap=no AS_IF([test "x$enable_ldapmail" = "xyes"], [ AC_MSG_ERROR([LDAP support required but library not found.]); ]) ]) AS_IF([test "x$build_ldap" = "xyes"], [ LDAP_LIBS="-lldap -llber" AC_DEFINE([USE_LDAP_MAIL_LOOKUP], 1, [Lookup email address using LDAP]) COMPILE_OPTS="$COMPILE_OPTS USE_LDAP_MAIL_LOOKUP" ]) ]) 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" ]) ]) 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.]) ]) ]) ]) 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"], [ build_libwrap="yes" AC_CHECK_HEADER([tcpd.h],[], [ 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]) ]) ]) AS_IF([test "x$build_libwrap" != "xno"], [ 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" ]) ]) 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" ]) AS_IF([test x"$build_rpc" != "xno"], [ AC_DEFINE([RPC], 1, [Support for RPC]) COMPILE_OPTS="$COMPILE_OPTS RPC" ]) ]) 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_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} proc-mounts: ${with_proc_mounts} rpc: ${build_rpc} rpcsetquota: ${enable_rpcsetquota} xfs-roothack: ${enable_xfs_roothack} werror: ${enable_werror} ============================================================================== ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaops.h�������������������������������������������������������������������������������0000644�0001750�0000144�00000001320�12124521007�011520� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/rquota_clnt.c����������������������������������������������������������������������������0000644�0001750�0000144�00000006372�12513140325�012211� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quotasys.h�������������������������������������������������������������������������������0000644�0001750�0000144�00000013452�12435313750�011557� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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" #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 */ }; /* * 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); /* 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 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 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 *, int); /* 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 *, int); /* 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 */ 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); /* 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.03/quotaio_meta.c���������������������������������������������������������������������������0000644�0001750�0000144�00000002722�12124521007�012336� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 <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)) { return generic_scan_dquots(h, process_dquot, vfs_get_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.03/rquota.c���������������������������������������������������������������������������������0000644�0001750�0000144�00000017766�12513140325�011202� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quota.h����������������������������������������������������������������������������������0000644�0001750�0000144�00000012466�12634315177�011032� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 2 #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_("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 */ /* * 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; }; /* * 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 __P((int, const char *, qid_t, caddr_t)); #endif /* _QUOTA_ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotasync.1������������������������������������������������������������������������������0000644�0001750�0000144�00000003105�12124521007�011607� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH QUOTASYNC 1 .SH NAME quotasync \- synchronize in-kernel file system usage and limits to disk format .SH SYNOPSIS .B quotasync [ .B -ug ] .IR mount-point ... .br .B quotasync [ .B -ug ] .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 -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.03/edquota.c��������������������������������������������������������������������������������0000644�0001750�0000144�00000026256�12477020127�011331� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1980, 1990 Regents of the University of California. All * rights reserved. * * This code is derived from software contributed to Berkeley by Robert Elz at * The University of Melbourne. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 2. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. 3. All advertising * materials mentioning features or use of this software must display the * following acknowledgement: This product includes software developed by the * University of California, Berkeley and its contributors. 4. Neither the * name of the University nor the names of its contributors may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "config.h" /* * 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 [-u|g] [-F formatname] [-f filesystem] -t\n\ \tedquota [-u|g] [-F formatname] [-f filesystem] -T username|groupname ...\n"), rpcflag); fputs(_("\n\ -u, --user edit user data\n\ -g, --group edit group 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' }, { "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, "ughrmntTVp:F:f:", long_opts, NULL)) != -1) { #else while ((ret = getopt_long(argc, argv, "ughtTVp:F:f:", long_opts, NULL)) != -1) { #endif switch (ret) { case 'p': protoname = optarg; break; case 'g': quotatype = GRPQUOTA; 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, 0); 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!")); 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, 0); 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!")); 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.03/quotaio_generic.c������������������������������������������������������������������������0000644�0001750�0000144�00000010547�12124521007�013030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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(); } free(dquot); return ret; } ���������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaio.h��������������������������������������������������������������������������������0000644�0001750�0000144�00000014333�12124521007�011336� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/Makefile.in������������������������������������������������������������������������������0000644�0001750�0000144�00000214056�12635010606�011562� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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 = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' 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@ bin_PROGRAMS = quota$(EXEEXT) quotasync$(EXEEXT) sbin_PROGRAMS = quotacheck$(EXEEXT) quotaon$(EXEEXT) quot$(EXEEXT) \ repquota$(EXEEXT) warnquota$(EXEEXT) quotastats$(EXEEXT) \ xqmstats$(EXEEXT) edquota$(EXEEXT) setquota$(EXEEXT) \ convertquota$(EXEEXT) rpc.rquotad$(EXEEXT) $(am__EXEEXT_1) @WITH_NETLINK_TRUE@am__append_1 = \ @WITH_NETLINK_TRUE@ quota_nld subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in mkinstalldirs depcomp ABOUT-NLS COPYING \ ar-lib config.guess config.rpath config.sub install-sh missing 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) 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_OBJECTS = librpcclient_a-rquota.$(OBJEXT) \ librpcclient_a-rquota_client.$(OBJEXT) \ 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_NETLINK_TRUE@am__EXEEXT_1 = quota_nld$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS) am_convertquota_OBJECTS = convertquota.$(OBJEXT) convertquota_OBJECTS = $(am_convertquota_OBJECTS) convertquota_DEPENDENCIES = libquota.a $(RPCLIBS) am_edquota_OBJECTS = edquota.$(OBJEXT) quotaops.$(OBJEXT) edquota_OBJECTS = $(am_edquota_OBJECTS) edquota_DEPENDENCIES = libquota.a $(RPCLIBS) am_quot_OBJECTS = quot.$(OBJEXT) quot_OBJECTS = $(am_quot_OBJECTS) quot_DEPENDENCIES = libquota.a $(RPCLIBS) am_quota_OBJECTS = quota.$(OBJEXT) quotaops.$(OBJEXT) quota_OBJECTS = $(am_quota_OBJECTS) quota_DEPENDENCIES = libquota.a $(RPCLIBS) am_quota_nld_OBJECTS = quota_nld-quota_nld.$(OBJEXT) quota_nld_OBJECTS = $(am_quota_nld_OBJECTS) am__DEPENDENCIES_1 = quota_nld_DEPENDENCIES = libquota.a $(RPCLIBS) $(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) $(RPCLIBS) 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 $(RPCLIBS) am_quotastats_OBJECTS = quotastats.$(OBJEXT) common.$(OBJEXT) \ pot.$(OBJEXT) quotastats_OBJECTS = $(am_quotastats_OBJECTS) quotastats_LDADD = $(LDADD) am_quotasync_OBJECTS = quotasync.$(OBJEXT) quotasync_OBJECTS = $(am_quotasync_OBJECTS) quotasync_DEPENDENCIES = libquota.a $(RPCLIBS) am_repquota_OBJECTS = repquota.$(OBJEXT) repquota_OBJECTS = $(am_repquota_OBJECTS) repquota_DEPENDENCIES = libquota.a $(RPCLIBS) am_rpc_rquotad_OBJECTS = rquota_server.$(OBJEXT) rquota_svc.$(OBJEXT) \ svc_socket.$(OBJEXT) rpc_rquotad_OBJECTS = $(am_rpc_rquotad_OBJECTS) rpc_rquotad_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) $(RPCLIBS) am_setquota_OBJECTS = setquota.$(OBJEXT) quotaops.$(OBJEXT) setquota_OBJECTS = $(am_setquota_OBJECTS) setquota_DEPENDENCIES = libquota.a $(RPCLIBS) am_warnquota_OBJECTS = warnquota.$(OBJEXT) warnquota_OBJECTS = $(am_warnquota_OBJECTS) warnquota_DEPENDENCIES = libquota.a $(am__DEPENDENCIES_1) $(RPCLIBS) am_xqmstats_OBJECTS = xqmstats.$(OBJEXT) common.$(OBJEXT) \ pot.$(OBJEXT) xqmstats_OBJECTS = $(am_xqmstats_OBJECTS) xqmstats_LDADD = $(LDADD) 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) $(quot_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) $(librpcclient_a_SOURCES) \ $(convertquota_SOURCES) $(edquota_SOURCES) $(quot_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) 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) 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@ 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@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ 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 = $(datadir)/doc/@PACKAGE@ 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 BUILT_SOURCES = rquota.h rquota.c rquota_clnt.c doc_DATA = \ README.mailserver \ README.ldap-support \ set_limits_example.c \ doc/quotadoc.sgml \ doc/quotas.ms \ doc/quotas.preformated \ doc/quotas-1.eps rpcsvcdir = $(includedir)/rpcsvc rpcsvc_DATA = \ rquota.h \ rquota.x sysconf_DATA = \ warnquota.conf \ quotatab \ quotagrpadmins man_MANS = \ convertquota.8 \ edquota.8 \ quotagrpadmins.5 \ quotacheck.8 \ quota_nld.8 \ quotaon.8 \ quotastats.8 \ quotasync.1 \ quotatab.5 \ quota.1 \ quot.8 \ repquota.8 \ rpc.rquotad.8 \ rquota.3 \ setquota.8 \ warnquota.conf.5 \ warnquota.8 \ xqmstats.8 CLEANFILES = rquota.c rquota.h rquota_clnt.c SUBDIRS = po EXTRA_DIST = \ $(sysconf_DATA) \ $(doc_DATA) \ $(man_MANS) \ $(rpcsvc_DATA) \ autogen.sh \ Changelog noinst_LIBRARIES = \ libquota.a \ librpcclient.a librpcclient_a_SOURCES = \ rquota.c \ rquota.h \ rquota_client.c \ rquota_client.h \ rquota_clnt.c librpcclient_a_CFLAGS = -Wno-unused @WITH_RPC_TRUE@RPCLIBS = librpcclient.a 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 \ $(RPCLIBS) quotacheck_SOURCES = \ quotacheck.c \ quotacheck.h \ quotacheck_v1.c \ quotacheck_v2.c \ quota_tree.h \ quotaops.c quotacheck_CFLAGS = \ $(EXT2FS_CFLAGS) \ $(COM_ERR_CFLAGS) quotacheck_LDADD = \ libquota.a \ $(EXT2FS_LIBS) \ $(COM_ERR_LIBS) \ $(RPCLIBS) quota_SOURCES = \ quota.c \ quota.h \ quotaops.c \ quotaops.h quota_LDADD = \ libquota.a \ $(RPCLIBS) quotasync_SOURCES = quotasync.c quotasync_LDADD = \ libquota.a \ $(RPCLIBS) quot_SOURCES = \ quot.c \ quot.h quot_LDADD = \ libquota.a \ $(RPCLIBS) repquota_SOURCES = repquota.c repquota_LDADD = \ libquota.a \ $(RPCLIBS) warnquota_SOURCES = warnquota.c warnquota_LDADD = \ libquota.a \ $(LDAP_LIBS) \ $(RPCLIBS) quotastats_SOURCES = \ quotastats.c \ common.c \ common.h \ pot.c \ pot.h xqmstats_SOURCES = \ xqmstats.c \ common.c \ common.h \ pot.c \ pot.h edquota_SOURCES = \ edquota.c \ quotaops.c \ quotaops.h edquota_LDADD = \ libquota.a \ $(RPCLIBS) setquota_SOURCES = \ setquota.c \ quotaops.c \ quotaops.h setquota_LDADD = \ libquota.a \ $(RPCLIBS) convertquota_SOURCES = convertquota.c convertquota_LDADD = \ libquota.a \ $(RPCLIBS) rpc_rquotad_SOURCES = \ rquota_server.c \ rquota_svc.c \ svc_socket.c rpc_rquotad_LDADD = \ libquota.a \ $(WRAP_LIBS) \ $(RPCLIBS) quota_nld_SOURCES = quota_nld.c quota_nld_CFLAGS = \ $(DBUS_CFLAGS) \ $(LIBNL3_CFLAGS) quota_nld_LDADD = \ libquota.a \ $(RPCLIBS) \ $(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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(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) quot$(EXEEXT): $(quot_OBJECTS) $(quot_DEPENDENCIES) $(EXTRA_quot_DEPENDENCIES) @rm -f quot$(EXEEXT) $(AM_V_CCLD)$(LINK) $(quot_OBJECTS) $(quot_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)/quot.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 $< .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 `$(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) | GZIP=$(GZIP_ENV) gzip -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 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -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*) \ GZIP=$(GZIP_ENV) gzip -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*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(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 \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && 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 # ------------------ # 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 $@ $< # -------- # 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.03/quotagrpadmins���������������������������������������������������������������������������0000644�0001750�0000144�00000000334�12124521007�012461� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quotacheck.c�����������������������������������������������������������������������������0000644�0001750�0000144�00000102773�12437336771�012030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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; 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); return -1; } if ((error = ext2fs_allocate_inode_bitmap(fs, "directory inode map", &inode_dir_map))) { errstr(_("errstr (%d) while allocating directory inode bitmap\n"), (int)error); return -1; } if ((error = ext2fs_open_inode_scan(fs, inode_buffer_blocks, &scan))) { errstr(_("error (%d) while opening inode scan\n"), (int)error); return -1; } if ((error = ext2fs_get_next_inode(scan, &i_num, &inode))) { errstr(_("error (%d) while starting inode scan\n"), (int)error); return -1; } 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); return -1; } } return 0; } #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 ((dp = opendir(pathname)) == (DIR *) NULL) die(2, _("\nCan open directory %s: %s\n"), pathname, strerror(errno)); chdir(pathname); 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)); 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 (1) { 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); } } /* 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; } } ret = 0; 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; 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) if (process_file(mnt, USRQUOTA) < 0) ucheck = 0; if (gcheck) if (process_file(mnt, GRPQUOTA) < 0) gcheck = 0; if (!ucheck && !gcheck) /* Nothing to check? */ return 0; 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)) { if ((failed = ext2_direct_scan(mnt->me_devname)) < 0) goto out; } else { #else if (mnt->me_dir) { #endif if (flags & FL_VERYVERBOSE) putchar('\n'); if ((failed = scan_dir(mnt->me_dir)) < 0) 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) 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)) 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 warn if not using journaled quotas */ static void warn_if_jquota_supported(void) { struct utsname stats; int v; char *errch; if (uname(&stats) < 0) { errstr(_("Cannot get system info: %s\n"), strerror(errno)); return; } if (strcmp(stats.sysname, "Linux")) return; v = strtol(stats.release, &errch, 10); if (v < 2) return; if (v >= 3) goto warn; if (*errch != '.') return; v = strtol(errch + 1, &errch, 10); if (*errch != '.' || v < 6) return; v = strtol(errch + 1, &errch, 10); if (v < 11) return; warn: 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")); } /* 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)) ucheck = 1; else ucheck = 0; if (gwant && me_hasquota(mnt, GRPQUOTA)) 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 (flags & (FL_VERBOSE | FL_DEBUG) && !str_hasmntopt(mnt->me_opts, MNTOPT_USRJQUOTA) && !str_hasmntopt(mnt->me_opts, MNTOPT_GRPJQUOTA) && !warned && (!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))) { warned = 1; warn_if_jquota_supported(); } 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.03/quotastats.8�����������������������������������������������������������������������������0000644�0001750�0000144�00000001337�12124521007�012005� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/common.c���������������������������������������������������������������������������������0000644�0001750�0000144�00000004611�12452524235�011150� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Common things for all utilities * * Jan Kara <jack@suse.cz> - sponsored by SuSE CR * * Jani Jaakkola <jjaakkol@cs.helsinki.fi> - syslog support */ #include "config.h" #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <syslog.h> #include <sys/types.h> #include <sys/stat.h> #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 errstr(char *fmtstr, ...) { va_list args; va_start(args, fmtstr); if (enable_syslog) do_syslog(LOG_ERR, fmtstr, args); else { fprintf(stderr, "%s: ", progname); vfprintf(stderr, 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); d[len - 1] = 0; } 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; } �����������������������������������������������������������������������������������������������������������������������quota-4.03/Changelog��������������������������������������������������������������������������������0000644�0001750�0000144�00000140644�12635010602�011324� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 <paths.h> 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 <quotatab> and -c <configfile> 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 <filesystem> 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 <smw8923@cmsu2.cmsu.edu> 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 <huggie@earth.li>. * 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 <sct@redhat.com> * 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 <a.gruenbacher@bestbits.at> * 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 <alaric@babcom.com>) * Removed searching of /dev dir from rquota_server. Only lookup mounted filesystems. (Patch by Roman Kagan <Roman.Kagan@itep.ru>) * 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 <michael@fam-meskes.de> 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 <oscar@cdrtcampos.es>) 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 <mb@sime.com> 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 <jlewis@inorganic5.fdt.net> * 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.03/quota_tree.h�����������������������������������������������������������������������������0000644�0001750�0000144�00000003714�12124521007�012026� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/quota_nld.8������������������������������������������������������������������������������0000644�0001750�0000144�00000002643�12124521007�011564� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/config.sub�������������������������������������������������������������������������������0000755�0001750�0000144�00000105301�12513140311�011460� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-04-24' # 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 <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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 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* | \ kopensolaris*-gnu* | \ 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 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | 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 \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | 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 ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | 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-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | 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-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | 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-* \ | 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 ;; 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 ;; 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 ;; 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=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-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 ;; 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 | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | 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 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; 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 ;; 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* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -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 ;; 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 ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quotaio_v2.h�����������������������������������������������������������������������������0000644�0001750�0000144�00000006266�12124521007�011753� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/convertquota.c���������������������������������������������������������������������������0000644�0001750�0000144�00000023712�12437304350�012412� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * * Utility for converting quota file from old to new format * * Sponsored by SuSE CR */ #include "config.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <getopt.h> #include <endian.h> #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); 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.03/rquota_client.c��������������������������������������������������������������������������0000644�0001750�0000144�00000023712�12435305673�012540� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 rquotaprog_not_registered = 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 (rpc_createerr.cf_stat == RPC_PROGNOTREGISTERED) rquotaprog_not_registered = 1; } 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; if (rpc_createerr.cf_stat == RPC_PROGNOTREGISTERED) rquotaprog_not_registered = 1; } } } free(fsname_tmp); if (result) ret = result->status; else if (rquotaprog_not_registered) ret = Q_NOQUOTA; 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 rquotaprog_not_registered = 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 (rpc_createerr.cf_stat == RPC_PROGNOTREGISTERED) rquotaprog_not_registered = 1; } 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; if (rpc_createerr.cf_stat == RPC_PROGNOTREGISTERED) rquotaprog_not_registered = 1; } } } free(fsname_tmp); if (result) ret = result->status; else if (rquotaprog_not_registered) ret = Q_NOQUOTA; else ret = -1; return rquota_err(ret); #endif return -1; } #endif ������������������������������������������������������quota-4.03/quotasync.c������������������������������������������������������������������������������0000644�0001750�0000144�00000005757�12437304350�011717� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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 "config.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 */ 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 [-ug] mount-point...\n" " or: %1$s [-ug] -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" "-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' }, { "all", 0, NULL, 'a' }, { "version", 0, NULL, 'V' }, { "help", 0, NULL, 'h' }, { NULL, 0, NULL, 0 } }; while ((ret = getopt_long(argcnt, argstr, "ahugV", 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 '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; return ret; } �����������������quota-4.03/quotaio_v1.h�����������������������������������������������������������������������������0000644�0001750�0000144�00000003262�12124521007�011743� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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.03/repquota.c�������������������������������������������������������������������������������0000644�0001750�0000144�00000030252�12437304350�011515� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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_SHORTNUMS 32 /* Try to print space in appropriate units */ #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 */ 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]; 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\ -s, --human-readable show numbers in human friendly units (MB, GB, ...)\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 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' }, { "help", 0, NULL, 'h' }, { "truncate-names", 0, NULL, 't' }, { "raw-grace", 0, NULL, 'p' }, { "human-readable", 0, 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, "VavughtspncCiFO:", 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 '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': flags |= FL_SHORTNUMS; 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))) 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], flags & FL_SHORTNUMS); space2str(entry->dqb_bsoftlimit, numbuf[1], flags & FL_SHORTNUMS); space2str(entry->dqb_bhardlimit, numbuf[2], flags & FL_SHORTNUMS); 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 (flags & FL_SHORTNUMS) 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], flags & FL_SHORTNUMS); number2str(entry->dqb_isoftlimit, numbuf[1], flags & FL_SHORTNUMS); number2str(entry->dqb_ihardlimit, numbuf[2], flags & FL_SHORTNUMS); 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 { 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(); } 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 typestr = _("Group"); 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 (flags & FL_SHORTNUMS) 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 (flags & FL_SHORTNUMS) 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 (h->qh_ops->report && ofmt == QOF_DEFAULT) { putchar('\n'); 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 (ofmt == QOF_XML) printf("</repquota>\n"); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quota-4.03/quota.1����������������������������������������������������������������������������������0000644�0001750�0000144�00000010520�12326276721�010727� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 -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 -v, --verbose will display quotas on filesystems where no storage is allocated. .TP .B -s, --human-readable option will make .BR quota (1) try to choose units for showing limits, used space and used inodes. .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 -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. Non-super-users can use the 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.03/missing����������������������������������������������������������������������������������0000755�0001750�0000144�00000015331�12513140311�011077� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # UTC # Copyright (C) 1996-2013 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 'automa4te' 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: "UTC" # time-stamp-end: "; # UTC" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������