ó ɼjWc@sàdZddlZddlZddlZddlZddlZddlZddl Zddl Zddl Zej j Z idefd6defd6defd6defd6Zd „Zd „Zd „Zd „ZdS( s”This module implements the "zfs userspace" and "zfs groupspace" subcommands. The only public interface is the zfs.userspace.do_userspace() function.iÿÿÿÿNtuseds userused@tquotas userquota@s groupused@s groupquota@cCset|\}}|r8d|jkr8d|jkr8tS| rad|jkrad|jkratStS(sAReturn True if this property (eg "userquota@") should be skipped.t posixgrouptsmbgroupt posixusertsmbuser(tpropsttypestTruetFalse(toptionstproptfieldtisgroup((s../../common/userspace.pytskiptype0sc Cs™|rd||f}n d|}idd„fd6dd„fd6d d „fd6d d „fd6|t|ƒf\}}|jƒjd dƒ|jkr¤d Stƒ}||d<|j rø|d!krøy||ƒ|dDsis POSIX GroupcSstjt|ƒƒjS(N(tgrptgetgrgidtinttgr_name(R((s../../common/userspace.pyREsisSMB UsercSstjj|dƒS(Ni(RRR(R((s../../common/userspace.pyRFss POSIX UsercSstjt|ƒƒjS(N(tpwdtgetpwuidRtpw_name(R((s../../common/userspace.pyRGst tttypeitnames%20ds name.sortt0Rs used.sortRtnones quota.sorttdefaulttsource(ii(ii(ii(iiNl( tbooltlowertreplaceRtNonetdicttnonametKeyErrortparsabletstrtzfstutiltnicenum( R R tdomaintridtdefquotatidstrttypenametmapfunctv((s../../common/userspace.pyt new_entry;s@ !           c Csh|\}}}t|\}} |jro|roy*tjjd||f| ƒ}d}Wqotk rkqoXn| ||f} y|| } Wn=tk rËt|| |||ƒ} | s¾dS| || ƒ| ƒq·q·WˆjsÿdLdMgˆ_nd ˆjkr|dˆ_ntjj|d6d?ƒ} | jd@ƒr`tjjƒr`tˆ_n| jdAƒs‡tdBƒGH| jƒntƒ} d;} x¸tjƒD]ª} tˆ| ƒr¾q£nt| \}}|rò| dCkrò| jdDƒ} n+| r| dEkr| jdFƒ} nd;} x-| j| ƒD]}t| ˆ| || ƒq-Wq£W‡fdG†}tjj ˆj |ƒ} x*| j!ƒD]}| j"||ƒ|ƒq…W| j#ˆj$ ƒdHS(Ns@Implements the "zfs userspace" and "zfs groupspace" subcommands.cs3ˆjƒ|r%Hˆjd|ƒn ˆjƒdS(Ns zfs: error: (t print_helptexit(tmsg(tparser(s../../common/userspace.pytusage•s  it userspacesposixuser,smbusersposixgroup,smbgroupRRRRR"tallRRRRs-%s [-niHp] [-o field[,...]] [-sS field] ... s) [-t type[,...]] RCtprogR,s-ntactiont store_truetdestR(thelps+Print numeric ID instead of user/group names-iR8s.translate SID to posix (possibly ephemeral) IDs-Ht noheaderss no headers, tab delimited outputs-pR*sexact (parsable) numeric outputs-otfieldstmetavars field[,...]R!stype,name,used,quota,sources1print only these fields (eg type,name,used,quota)s-st sortfieldsR tchoicetchoicestcallbacks sort fields-Ssreverse sort fields-tRs type[,...]sEprint only these types (eg posixuser,smbuser,posixgroup,smbgroup,all)iswrong number of argumentsit,sinvalid field %ssinvalid type %st filesystemtzonedtuseraccountingsEInitializing accounting information on old filesystem, please wait...s groupused@tdefaultgroupquotas userused@tdefaultuserquotacs²tƒ}x¢ˆjD]—\}}y||d}Wntk rN||}nX|dkry | }Wqtk r™g|D]}t|ƒ ^q}}qXn|j|ƒqW|S(Ns.sorts-S(tlistRNR)t TypeErrortordtappend(tvaltltoptR tntc(R (s../../common/userspace.pytcmpkeyós     'N(stypesnamesusedsquotassource(susedsquota(salls posixuserssmbusers posixgroupssmbgroup(s-sstype(s-ssname(%R&tsystargvt_R,R-tZFSOptionParsert add_optionRXtappend_with_optt parse_argstlenRLtsplitRRNtdatasettDatasettgetpropRRt isglobalzoneRR(tuserspace_upgradeR'RtkeysRRDR>ttabletTablet itervaluestaddlinetprintmeRK(RCt defaulttypesRLt rjustfieldsRtutargstdsnametftttdsR:R1R R R R;RaR\((R RBs../../common/userspace.pyt do_userspace’s                  (t__doc__RbRRterrnot solaris.miscRtzfs.utilR,t zfs.ioctlt zfs.datasett zfs.tableR-RdR RRRR6R>R~(((s../../common/userspace.pyts&              0 '