Lines 141-146
Link Here
|
141 |
conn.login(username) |
141 |
conn.login(username) |
142 |
conn.set_pasv(passive) |
142 |
conn.set_pasv(passive) |
143 |
conn.set_debuglevel(0) |
143 |
conn.set_debuglevel(0) |
|
|
144 |
elif protocol == "sftp": |
145 |
try: |
146 |
import paramiko |
147 |
except ImportError: |
148 |
raise NotImplementedError( |
149 |
"paramiko must be installed for sftp support") |
150 |
t = paramiko.Transport(host) |
151 |
t.connect(username=username, password=password) |
152 |
conn = paramiko.SFTPClient.from_transport(t) |
144 |
else: |
153 |
else: |
145 |
raise NotImplementedError, "%s is not a supported protocol." % protocol |
154 |
raise NotImplementedError, "%s is not a supported protocol." % protocol |
146 |
|
155 |
|
Lines 307-312
Link Here
|
307 |
del olddir |
316 |
del olddir |
308 |
else: |
317 |
else: |
309 |
listing = conn.nlst(address) |
318 |
listing = conn.nlst(address) |
|
|
319 |
elif protocol == "sftp": |
320 |
listing = conn.listdir(address) |
310 |
else: |
321 |
else: |
311 |
raise TypeError, "Unknown protocol. '%s'" % protocol |
322 |
raise TypeError, "Unknown protocol. '%s'" % protocol |
312 |
|
323 |
|
Lines 332-337
Link Here
|
332 |
data,rc,msg = make_http_request(conn, address, params, headers) |
343 |
data,rc,msg = make_http_request(conn, address, params, headers) |
333 |
elif protocol in ["ftp"]: |
344 |
elif protocol in ["ftp"]: |
334 |
data,rc,msg = make_ftp_request(conn, address, -chunk_size) |
345 |
data,rc,msg = make_ftp_request(conn, address, -chunk_size) |
|
|
346 |
elif protocol == "sftp": |
347 |
f = conn.open(address) |
348 |
try: |
349 |
f.seek(-chunk_size, 2) |
350 |
data = f.read() |
351 |
finally: |
352 |
f.close() |
335 |
else: |
353 |
else: |
336 |
raise TypeError, "Unknown protocol. '%s'" % protocol |
354 |
raise TypeError, "Unknown protocol. '%s'" % protocol |
337 |
|
355 |
|
Lines 366-393
Link Here
|
366 |
if not fcmd: |
384 |
if not fcmd: |
367 |
return file_get_lib(baseurl,dest,conn) |
385 |
return file_get_lib(baseurl,dest,conn) |
368 |
|
386 |
|
369 |
fcmd = fcmd.replace("${DISTDIR}",dest) |
387 |
variables = { |
370 |
fcmd = fcmd.replace("${URI}", baseurl) |
388 |
"DISTDIR": dest, |
371 |
fcmd = fcmd.replace("${FILE}", os.path.basename(baseurl)) |
389 |
"URI": baseurl, |
372 |
mysplit = fcmd.split() |
390 |
"FILE": os.path.basename(baseurl) |
373 |
mycmd = mysplit[0] |
391 |
} |
374 |
myargs = [os.path.basename(mycmd)]+mysplit[1:] |
392 |
import shlex, StringIO |
375 |
mypid=os.fork() |
393 |
from portage_util import varexpand |
376 |
if mypid == 0: |
394 |
from portage_exec import spawn |
377 |
try: |
395 |
lexer = shlex.shlex(StringIO.StringIO(fcmd), posix=True) |
378 |
os.execv(mycmd,myargs) |
396 |
lexer.whitespace_split = True |
379 |
except OSError: |
397 |
myfetch = [varexpand(x, mydict=variables) for x in lexer] |
380 |
pass |
398 |
retval = spawn(myfetch, env=os.environ.copy()) |
381 |
sys.stderr.write("!!! Failed to spawn fetcher.\n") |
399 |
if retval != os.EX_OK: |
382 |
sys.stderr.flush() |
|
|
383 |
os._exit(1) |
384 |
retval=os.waitpid(mypid,0)[1] |
385 |
if (retval & 0xff) == 0: |
386 |
retval = retval >> 8 |
387 |
else: |
388 |
sys.stderr.write("Spawned processes caught a signal.\n") |
389 |
sys.exit(1) |
390 |
if retval != 0: |
391 |
sys.stderr.write("Fetcher exited with a failure condition.\n") |
400 |
sys.stderr.write("Fetcher exited with a failure condition.\n") |
392 |
return 0 |
401 |
return 0 |
393 |
return 1 |
402 |
return 1 |
Lines 409-414
Link Here
|
409 |
data,rc,msg = make_http_request(conn, address, params, headers, dest=dest) |
418 |
data,rc,msg = make_http_request(conn, address, params, headers, dest=dest) |
410 |
elif protocol in ["ftp"]: |
419 |
elif protocol in ["ftp"]: |
411 |
data,rc,msg = make_ftp_request(conn, address, dest=dest) |
420 |
data,rc,msg = make_ftp_request(conn, address, dest=dest) |
|
|
421 |
elif protocol == "sftp": |
422 |
conn.get(address, dest) |
412 |
else: |
423 |
else: |
413 |
raise TypeError, "Unknown protocol. '%s'" % protocol |
424 |
raise TypeError, "Unknown protocol. '%s'" % protocol |
414 |
|
425 |
|