Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
ó
ōEYc@s„dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZej
ƒdkrÃddlZddlZddlZnddlZddlmZddlmZddlmZddlmZddlmZdd	lmZejeƒZej d
ej!fd„ƒYƒZ"ej dej!fd
„ƒYƒZ#de$fd„ƒYZ%de$fd„ƒYZ&d„Z'd„Z(d„Z)dej*fd„ƒYZ+dej,fd„ƒYZ-d„Z.ej/d„Z0dd„Z2de-fd„ƒYZ3de-fd„ƒYZ4d e5fd!„ƒYZ6d"„Z7ed#kr€e7ƒndS($sPrivilege separation ("privsep") daemon.

To ease transition this supports 2 alternative methods of starting the
daemon, all resulting in a helper process running with elevated
privileges and open socket(s) to the original process:

1. Start via fork()

   Assumes process currently has all required privileges and is about
   to drop them (perhaps by setuid to an unprivileged user).  If the
   the initial environment is secure and `PrivContext.start(Method.FORK)`
   is called early in `main()`, then this is the most secure and
   simplest.  In particular, if the initial process is already running
   as non-root (but with sufficient capabilities, via eg suitable
   systemd service files), then no part needs to involve uid=0 or
   sudo.

2. Start via sudo/rootwrap

   This starts the privsep helper on first use via sudo and rootwrap,
   and communicates via a temporary Unix socket passed on the command
   line.  The communication channel is briefly exposed in the
   filesystem, but is protected with file permissions and connecting
   to it only grants access to the unprivileged process.  Requires a
   suitable entry in sudoers or rootwrap.conf filters.

The privsep daemon exits when the communication channel is closed,
(which usually occurs when the unprivileged process exits).

iÿÿÿÿNtLinux(tcfg(tlog(timportutils(t_(tcapabilities(tcommtStdioFdcBseZdZdZdZRS(iii(t__name__t
__module__tSTDINtSTDOUTtSTDERR(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyRLs	tMessagecBs2eZdZdZdZdZdZdZdZRS(s7Types of messages sent across the communication channeliiiiii(	RR	t__doc__tPINGtPONGtCALLtRETtERRtLOG(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR
ZstFailedToDropPrivilegescBseZRS((RR	(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyRest
ProtocolErrorcBseZRS((RR	(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyRiscCsRtj|tjƒ}|tj@dkrN|tjO}tj|tj|ƒndS(Ni(tfcntltF_GETFDt
FD_CLOEXECtF_SETFD(tfdtflags((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pytset_cloexecms
cCsyt|ƒ}Wn)ttfk
r;tj|ƒj}nX|dkr™ytj|ƒWq™tk
r•t	dƒ|}t
j|ƒt|ƒ‚q™XndS(NisFailed to set uid %s(
tintt	TypeErrort
ValueErrortpwdtgetpwnamtpw_uidtostsetuidtOSErrorRRtcriticalR(tuser_id_or_nametnew_uidtmsg((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR%ts

cCsyt|ƒ}Wn)ttfk
r;tj|ƒj}nX|dkr™ytj|ƒWq™tk
r•t	dƒ|}t
j|ƒt|ƒ‚q™XndS(NisFailed to set gid %s(
RRR tgrptgetgrnamtgr_gidR$tsetgidR&RRR'R(tgroup_id_or_nametnew_gidR*((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR.‚s

tPrivsepLogHandlercBseZdd„Zd„ZRS(cCs)tt|ƒjƒ||_||_dS(N(tsuperR1t__init__tchanneltprocessName(tselfR4R5((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR3‘s	cCs±|jr|j|_nt|jƒ}|jrt|jsg|jpKtjƒ}|j|jƒ|d<nd|d<n|j
ƒ|d<d|d<|jjdt
j|ffƒdS(Ntexc_texttexc_infoR*targs((R5tdictt__dict__R8R7t	formattert	pyloggingt	FormattertformatExceptiontNonet
getMessageR4tsendR
R(R6trecordtdatatfmt((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pytemit–s			

N(RR	R@R3RF(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR1st_ClientChannelcBs2eZdZd„Zd„Zd„Zd„ZRS(sCOur protocol, layered on the basic primitives in comm.ClientChannelcCs$tt|ƒj|ƒ|jƒdS(N(R2RGR3t
exchange_ping(R6tsock((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR3®scCsy/|jtjjfƒ}|dtjk}Wn)tk
rZ}tjd|ƒt}nX|s‰t	dƒ}tj
|ƒt|ƒ‚ndS(Nis/Error while sending initial PING to privsep: %ssPrivsep daemon failed to start(t	send_recvR
RtvalueRt	ExceptionRt	exceptiontFalseRR'R(R6treplytsuccessteR*((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyRH²s

cCs|jtjj|||fƒ}|dtjkr<|dS|dtjkrutj|dƒ}||dŒ‚ntt	dƒ|ƒ‚dS(NiiisUnexpected response: %r(
RJR
RRKRRRtimport_classRR(R6tnameR9tkwargstresulttexc_type((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pytremote_call¿s!cCsb|dtjkrNtj|dƒ}tj|jƒr^tjj|ƒq^ntjd|ƒdS(Niis;Ignoring unexpected OOB message from privileged process: %r(	R
RR=t
makeLogRecordtisEnabledFortlevelnotloggerthandletwarning(R6R*RC((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pytout_of_bandÎs	(RR	RR3RHRWR^(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyRG«s
		
	cOs?tjjdƒr(tjj|||ŽStj|||ŽSdS(Ntsocket(teventlettpatchertis_monkey_patchedtgreeniot	GreenPipetiotopen(RR9RT((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pytfdopenÙscs}tjƒ\}}t|ddƒ}t|ddƒ}‡fd†}tjddd|d|fƒ}t|_|jƒ|S(	s?Helper that returns a file object that is asynchronously loggedtritwcs.x'|D]}tjˆd|jƒƒqWdS(Nsprivsep log: %s(RRtrstrip(tftline(tlevel(sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR[ìs
RSt	fd_loggerttargetR9(R$tpipeRgt	threadingtThreadtTruetdaemontstart(Rmtread_fdtwrite_fdtread_endt	write_endR[tt((RmsH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyt
_fd_loggeræs		
cCsS|dkr!tjdƒj}nx|jD]}|j|ƒq+W|j|ƒdS(N(R@tloggingt	getLoggerR[thandlerst
removeHandlert
addHandler(thandlertlog_rootth((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pytreplace_loggingùs
tForkingClientChannelcBseZd„ZRS(cCstjƒ\}}x+||fD]}|jtƒt|ƒqWx$tjtjfD]}|jƒqSWt	j
ƒdkrátj|ƒ}|j
ƒtt|dt|ƒƒƒt|d|ƒjƒtjdƒt	jdƒn|j
ƒtt|ƒj|ƒdS(s`Start privsep daemon using fork()

        Assumes we already have required privileges.
        iR5tcontextsprivsep daemon exitingN(R_t
socketpairtsetblockingRsRtsyststdouttstderrtflushR$tforkRt
ServerChanneltcloseR„R1tstrtDaemontrunRtdebugt_exitR2R…R3(R6R†tsock_atsock_btsRkR4((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR3s 



(RR	R3(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR…stRootwrapClientChannelcBseZd„ZRS(cCsltjtjƒ}tjƒ}zÚtjj|dƒ}|j|ƒ|jdƒ|j	|ƒ}t
jd|ƒtj
|dtdtƒƒ}|jƒdkrÈd|j}t
j|ƒt|ƒ‚nt
jdƒ|jƒ\}}	t
jd	|ƒWd
|jƒytj|ƒWn+tk
rC}
|
jtjkrD‚qDnXtj|ƒXtt|ƒj|ƒd
S(sZStart privsep daemon using exec()

        Uses sudo/rootwrap to gain privileges.
        sprivsep.sockisRunning privsep helper: %stshellR‹is+privsep helper command exited non-zero (%s)s'Spawned new privsep daemon via rootwraps!Accepted privsep connection to %sN(R_tAF_UNIXttempfiletmkdtempR$tpathtjointbindtlistenthelper_commandRtinfot
subprocesstPopenRNR{twaitt
returncodeR'RtacceptR“RtunlinkR&terrnotENOENTtrmdirR2R˜R3(R6R†tlisten_sockttmpdirtsockpathtcmdtprocR*RIt_addrRQ((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR3)s2







(RR	R3(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR˜(sR‘cBsDeZdZd„Zd„Zd„Zd„Zd„Zd„ZRS(s?NB: This doesn't fork() - do that yourself before calling run()cCsI||_||_|jj|_|jj|_t|jjƒ|_dS(N(R4R†tconftusertgrouptsetRtcaps(R6R4R†((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR3]s
		cCs<tjdƒtjdƒ|jƒ|jƒ|jƒdS(s8Run request loop. Sets up environment, then calls loop()t/iN(R$tchdirtumaskt_drop_privst_close_stdiotloop(R6((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR’ds




cCsQttjdƒ9}tj|jƒtjƒtj|jƒtjƒWdQXdS(Nsw+(RfR$tdevnulltdup2tfilenoRR
R(R6R½((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR»mscCsXz«tjtƒ|jdk	rlytjgƒWqltk
rhtdƒ}t	j
|ƒt|ƒ‚qlXn|jdk	r‹t
|jƒn|jdk	rªt|jƒnWdtjtƒXt	jditjƒd6tjƒd6ƒtj|j|jgƒd„}tjƒ\}}}t	jdi||ƒd6||ƒd6||ƒd	6ƒdS(
Ns$Failed to remove supplemental groupss5privsep process running with uid/gid: %(uid)s/%(gid)stuidtgidcSsO|s
dSg|D]!}tjj|t|ƒƒ^q}|jƒdj|ƒS(Ntnonet|(RtCAPS_BYVALUEtgetRtsortRž(tcapsettctfc((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pytfmt_capsŽs+
sPprivsep process running with capabilities (eff/prm/inh): %(eff)s/%(prm)s/%(inh)stefftprmtinh(Rtset_keepcapsRsR´R@R$t	setgroupsR&RRR'RR³R%R.RNR¢tgetuidtgetgidtdrop_all_caps_exceptR¶tget_caps(R6R*RÊRËRÌRÍ((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyRºss2


	!	

c	Gs³|tjkrtjjfS|tjkr™|\}}}tj|ƒ}|jj|ƒszt	dƒ|}t
|ƒ‚n|||Ž}tjj|fStt	dƒ|ƒ‚dS(Ns)Invalid privsep function: %s not exportedsUnknown privsep cmd: %s(
R
RRRKRRRRR†t
is_entrypointRt	NameErrorRR(	R6R¯R9RStf_argstf_kwargstfuncR*tret((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyt_process_cmd s
cCsZtjdtjƒƒ|jjtƒx |jD]\}}tjdi|d6|d6ƒy|j	|Œ}Wnnt
k
rÝ}tjdi|d6|d6dtƒ|j}d|j
|jf}tjj||jf}nXy8tjd	i|d6|d
6ƒ|jj||fƒWq0tk
rD}|jtjkr>Pn‚q0Xq0WtjdƒdS(
s Main body of daemon request loops privsep daemon running as pid %ss$privsep: request[%(msgid)s]: %(req)stmsgidtreqs5privsep: Exception during request[%(msgid)s]: %(err)sterrR8s%s.%ss$privsep: reply[%(msgid)s]: %(reply)sROs+Socket closed, shutting down privsep daemonN(RR¢R$tgetpidR†tset_client_modeRNR4R“RÚRLRst	__class__R	RR
RRKR9RBtIOErrorR©tEPIPE(R6RÛR*RORQtclstcls_name((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR¼±s.			(	RR	RR3R’R»RºRÚR¼(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyR‘Zs					-	cCs—tjjtjddtƒtjddtƒgƒtjtjƒtjdtjdddƒtj	tjdƒt
jtjjƒ}dd	l
m}t||jƒs»tjd
ƒntjtjƒ}|jtjjƒt|ƒtj|ƒ}tjƒdkrdStt|ƒƒtjd
ƒyt||ƒj ƒWn3t!k
rx}tj"|ƒtj#t$|ƒƒnXtj%dƒtj#dƒdS(s>Start privileged process, serving requests over a Unix socket.tprivsep_contexttrequiredtprivsep_sock_pathR9itprojecttprivsepiÿÿÿÿ(tpriv_contextsC--privsep_context must be the (python) name of a PrivContext objectiNsprivsep daemon startingsprivsep daemon exiting(&RtCONFtregister_cli_optstStrOptRsR|tregister_optionsR‰targvtsetupRRRRåtoslo_privsepRêt
isinstancetPrivContextRtfatalR_RštconnectRçRRRŽR$RR„R1R¢R‘R’RLRMtexitRR“(R†RêRIR4RQ((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pythelper_mainÓs2	
	


t__main__(8RtenumR©ReR|R=R$tplatformR_R£R‰R›RqtsystemRR+R!R`toslo_configRtoslo_logRt
oslo_utilsRtoslo_privsep._i18nRRñRRR}RRtuniquetIntEnumRR
RLRRRR%R.tHandlerR1t
ClientChannelRGRgtWARNR{R@R„R…R˜tobjectR‘R÷(((sH/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_privsep/daemon.pyt<module>,sV	
	
			.	
'2y	2