ó ÍOc@sjdZddlZddlmZddlZddljZddlm Z dej fd„ƒYZ dS(sŒmodule describing a driver packaging object. This module contains the DriverAction class, which represents a driver-type packaging object. iÿÿÿÿN(tmkstemp(t DebugValuest DriverActioncBsóeZdZgZdZdZeZej eZ dZ dZ dZdZdd„Zd„Zed„ƒZed„ƒZed„ƒZed„ƒZd „Zd „Zedded „ƒZeed „ƒZd „Zd„Zd„ZRS(s2Class representing a driver-type packaging object.tdrivertnamecKsÝtjj||||jjs/|jƒn|jdƒsBdSg}x[|jdƒD]J}t|jƒƒdkr•|j |j dd|ƒqX|j |ƒqXWt|ƒdkrÌ|d|j d}|dd||f}tj|di|d6|d6ƒq8WdS(Ns-bs-ds-is%ss8driver (%(name)s) upgrade (removal of alias '%(alias)s')Rtalias(RRR tget_roott_DriverAction__call(t driver_nametaliasestimagetrem_basetiR-((s8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pytremove_aliases…s    cCs$|j|jddgdiƒdS(Ntdevfsadms-usDriver activation failed(R5R (tcls((s8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pyt__activate_driverssc s|j}|jƒrdSt}yNxGtj|dddddƒD]'}|d|jdkrAt}PqAqAWWntk r€nXi}i}d}g} y½x¶tj|ddtddddƒD]}t |t ƒrí| j |d ƒqÁn|\} } |j | t ƒƒj| ƒ|j | gƒj | t| ƒfƒ| j d t|ƒƒqÁWWntk rinXt|jd dƒ} |jjd ƒ} | dkrfx$| jƒD]} |j| dƒqªWi} x@d „| jƒDƒD](\} } | j | t ƒƒj| ƒqáWxG|jƒD]9\} }x*|D]"} | j | t ƒƒj| ƒq-WqW| |j_nxV|jdƒD]E} | | }|jd|ksŸt‚t|ƒdkrv| }PqvqvW|r)t|jddƒ}||d\} }i|jdd6| d6|d6|d6|d6|jƒd6}| | krJtd|ƒ‚n3d}|| || |<|rtd|GHn d|GH|jƒd}tddd|jƒdƒ\}}tj|dƒ}|j | ƒ|j!ƒtj"|ƒ}tj#||j$ƒtj%||j&|j'ƒtj(||ƒn|rR| rR|j)||jdƒ}n|rh| rhd}n|r~|j*||ƒS|j+ƒrµ|j,d f}|jj-d!d"|j.ƒn|j,d#d$|jƒf}d|jkr|d%d&j/g|jdƒD]}d'|^qûƒf7}nd(|jkrO|d)d&j/|jd(ƒƒf7}nd*|jkrƒ|d+d,j/|jd*ƒƒf7}nd-|jkr·|d.d&j/|jd-ƒƒf7}nd/|jkrë|d0d,j/|jd/ƒƒf7}n||jdf7}|j0|d1i|jdd6ƒx\|jd2ƒD]K}|j1d$|jƒd3d+|d4f}|j0|d5i|jdd6ƒq0Wd6|jkr™tj2j3tj2j/|jƒd7ƒƒ}t4|ƒ}|j5ƒ‰|j!ƒtj"|ƒ}tdd8d|jƒdƒ\}}tj|dƒ}|j ˆƒ|j ‡fd9†|jd6ƒDƒƒ|j!ƒtj#||j$ƒtj%||j&|j'ƒtj(||ƒndS(:Nsetc/name_to_majort minfieldsit maxfieldsiRsetc/driver_aliasestraws s%s "%s" talias_to_driverRcssD|]:\}}|D]'}|jdƒD]}||fVq&qqdS(R3N(R (t.0tntact_listtactta((s8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pys ×s  R3it be_name_clonetnewtoldtlinetbetimgrootsThe '%(new)s' driver shares the alias '%(alias)s' with the '%(old)s' driver; both drivers cannot be installed simultaneously. Please remove the package delivering '%(old)s' or ensure that the package delivering '%(new)s' will not be installed, and try the operation again.s # pkg(5): s?The '%(new)s' driver shares the alias '%(alias)s' with the '%(old)s' driver, but the system cannot determine how the latter was delivered. Its entry on line %(line)d in /etc/driver_aliases has been commented out. If this driver is no longer needed, it may be removed by booting into the '%(be)s' boot environment and invoking 'rem_drv %(old)s' as well as removing line %(line)d from /etc/driver_aliases or, before rebooting, mounting the '%(be)s' boot environment and running 'rem_drv -b %(old)s' and removing line %(line)d from /etc/driver_aliases.s€The '%(new)s' driver shares the alias '%(alias)s' with the '%(old)s' driver, but the system cannot determine how the latter was delivered. Its entry on line %(line)d in /etc/driver_aliases has been commented out. If this driver is no longer needed, it may be removed by invoking 'rem_drv -b %(imgroot)s %(old)s' as well as removing line %(line)d from %(imgroot)s/etc/driver_aliases.s/etc/driver_aliasestsuffixs.driver_aliasestdirs/etctws-utinstallsactivate-driverss-ns-bs-iRs"%s"tclasss-ctpermss-mt,tpolicys-ptprivss-Psdriver (%(name)s) installRs-aRs)driver (%(name)s) clone permission updatetdevlinksetc/devlink.tabs .devlink.tabc3sA|]7}|jddƒdˆkr|jddƒdVqdS(s\ts s N(treplace(RCts(tdllines(s8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pys os(6R8tis_zonetFalseRt$_DriverAction__gen_read_binding_fileRtTruetIOErrortNonet isinstancetstrRt setdefaulttsettaddRttupletgetattrt imageplant get_actionstiterkeystpopt iteritemsRBR tAssertionErrortbootenvR4t RuntimeErrorRtostfdopent writelinestclosetstattchmodtst_modetchowntst_uidtst_gidtrenamet_DriverAction__get_image_datat_DriverAction__update_installt is_liverootRt add_actuatort_DriverAction__activate_driversR,R5Rtpathtnormpathtfilet readlines( RtpkgplantorigR8tmajortfieldstfile_dbt alias_linestalias_conflicttlinesRR3ta2dtdriver_actionsR7tnamestbe_nameRKterrdicttcommenttdaptdatdtdatptftstR-txRtdlptdlftdlttdltp((RZs8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pyRQ•s             $            6         c!s!ˆjdˆjƒdf}ˆjdˆjƒdf}tˆjdƒƒtˆjdƒƒ}tˆjdƒƒ}tˆjdƒƒ}||}||} tˆjdƒƒ} tˆjdƒƒ} | | } | | } tˆjdƒƒ}tˆjdƒƒ}||}||}tˆjdƒƒ}tˆjdƒƒ}||}||}tˆjd ƒƒ}tˆjd ƒƒ}||}||}xT|D]L}|d d |ˆjd f}ˆj|d iˆjd d 6|d6ƒq›W‡‡fd†}|s | rpy||| ƒWqptk rl}dˆjˆjd |d|d|dfGHd|| fGHqpXn‡‡‡fd†}dˆjks£dˆjkr4y |ƒWq4tk rñ}dˆjˆjd |d|d|dfGHq4tk r0}dˆjˆjd fdj |j dƒGHq4XnxP| D]H}|d|ˆjd f}ˆj|diˆjd d 6|d6ƒq;WxP| D]H}|d|ˆjd f}ˆj|diˆjd d 6|d6ƒqŽWxP|D]H}|d|ˆjd f}ˆj|diˆjd d 6|d6ƒqáWxP|D]H}|d|ˆjd f}ˆj|d iˆjd d 6|d6ƒq4Wx¯|D]§}|j ƒ}t |ƒd!kr¸|d} n4t |ƒdkrÓd"} nd#ˆjd |fGHq‡|d$| ˆjd f}ˆj|d%iˆjd d 6|d6ƒq‡WxP|D]H}|d$|ˆjd f}ˆj|d&iˆjd d 6|d6ƒq9WxI|D]A}|d|d'f}ˆj|d(iˆjd d 6|d6ƒqŒWxI|D]A}|d|d'f}ˆj|d)iˆjd d 6|d6ƒqØWdS(*Ns-bs-as-dR3RRRSRVRURs-is%sRs9driver (%(name)s) upgrade (addition of alias '%(alias)s')c sitjjtjjˆjƒdƒƒ}y)t|dƒ}|jƒ}|jƒWn%tk rw}|j d 7_ ‚nXxit |ƒD][\}}|j ƒ}t |ƒdkr…|dˆj dkr…|d|kr…||=q…q…Wx,|D]$}|dˆj d|fg7}qëWy*t|d ƒ}|j|ƒ|jƒWn%tk rd}|j d 7_ ‚nXdS( Nsetc/driver_classestrtreadingiiRis%s %s RPtwriting(R(Rž(RpR€RR,R4R‚RƒRsR_R-t enumerateRRRRr( t add_classt rem_classtdcptdcfR‹teR:tltarr(R8R(s8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pytupdate_classes£s0   " sW%s (%s) upgrade (classes modification) failed %s etc/driver_classes with error: %s (%s)iiistried to add %s and remove %sc stjjtjjˆjƒdƒƒ}y5t|ƒ}|jƒ‰|jƒtj|ƒ}Wn%t k rƒ}|j d7_ ‚nXt ˆj dƒƒ}t ˆj dƒƒ}||}||}g}xh|D]`} y#ˆj | jddƒdƒ} Wn-tk r'|j| jddƒƒqÏnXˆ| =qÏWˆj‡fd†|DƒƒyŽtdd d ˆjƒd ƒ\} } tj| d ƒ} | jˆƒ| jƒtj| |jƒtj| |j|jƒtj| |ƒWn%tk r}|j d7_ ‚nX|rt|‚ndS(Nsetc/devlink.tabRRWs\ts s c3sA|]7}|jddƒdˆkr|jddƒdVqdS(s\ts s N(RX(RCRY(R‹(s8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pys îsRNs .devlink.tabROs/etcRPRž(sreading(swriting(RpR€RR,R4R‚RƒRsRtR_R-RdR tindexRXt ValueErrorRtextendRRqRrRuRvRwRxRyRztEnvironmentErrorRo( R˜R™R–R¤tolinestnlinest add_linest rem_linestmissing_entriesRKtlinenoRšR›(R8R…R(R‹s8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pytupdate_devlinksÍsN      #       RWsU%s (%s) upgrade (devlinks modification) failed %s etc/devlink.tab with error: %s (%s)s%s (%s) upgrade (devlinks modification) failed modifying etc/devlink.tab. The following entries were to be removed, but were not found: s s-ms<driver (%(name)s) upgrade (removal of minor perm '%(perm)s')tperms=driver (%(name)s) upgrade (addition of minor perm '%(perm)s')s-Ps<driver (%(name)s) upgrade (addition of privilege '%(priv)s')tprivs;driver (%(name)s) upgrade (removal of privilege '%(priv)s')it*sHdriver (%s) update (removal of policy '%s') failed: invalid policy spec.s-ps:driver (%(name)s) upgrade (removal of policy '%(policy)s')s;driver (%(name)s) upgrade (addition of policy '%(policy)s')RsBdriver (%(name)s) upgrade (removal of clone permission '%(perm)s')sCdriver (%(name)s) upgrade (addition of clone permission '%(perm)s')( RR4RdR RR5R_RRoR,R-RR(!RR8R…tadd_baseR9t add_aliastnclasstoclassR R¡tnpermstopermst add_permst rem_permstnprivstoprivst add_privst rem_privstnpolicytopolicyt add_policyt rem_policytnclonetoclonet add_clonet rem_cloneR:R-R§R¤R²tspect minornode((R8R…Rs8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pyt__update_installxs´              6                          c cs1ttjjtjj|jƒ|ƒƒƒ}xó|D]ë}|jƒ}|jƒ}g}x>|D]6} | ddkryPn| jdƒ} |j| ƒq_W|dk rÎt |ƒ|krÎ|r4|Vq4q4qÎn|dk rt |ƒ|kr|r4|Vq4q4qn|r|Vq4|r4|Vq4q4W|j ƒdS(Nit#t"( R‚RpR€RR,R4tstripRRR`RRs( timgR€R?R@RAtmyfileRKR‡t result_fieldstfield((s8/usr/lib/python2.7/vendor-packages/pkg/actions/driver.pyt__gen_read_binding_filegs4         cCs<g}d}yJxCtj|dddddƒD]#}|d|kr.|d7}q.q.WWn;tk r“}|jd7_|r|j|ƒq”‚nX|dkr·|r°dgfSdSn|dkrytd|‚Wqtk r}|rü|j|ƒq‚qXn|d|ƒ}yeg|jd s