Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

"""Plugin utilities.""" 

import logging 

import os 

 

from certbot import util 

 

logger = logging.getLogger(__name__) 

 

def get_prefixes(path): 

"""Retrieves all possible path prefixes of a path, in descending order 

of length. For instance, 

(linux) /a/b/c returns ['/a/b/c', '/a/b', '/a', '/'] 

(windows) C:\\a\\b\\c returns ['C:\\a\\b\\c', 'C:\\a\\b', 'C:\\a', 'C:'] 

:param str path: the path to break into prefixes 

 

:returns: all possible path prefixes of given path in descending order 

:rtype: `list` of `str` 

""" 

prefix = os.path.normpath(path) 

prefixes = [] 

while len(prefix) > 0: 

prefixes.append(prefix) 

prefix, _ = os.path.split(prefix) 

# break once we hit the root path 

if prefix == prefixes[-1]: 

break 

return prefixes 

 

def path_surgery(cmd): 

"""Attempt to perform PATH surgery to find cmd 

 

Mitigates https://github.com/certbot/certbot/issues/1833 

 

:param str cmd: the command that is being searched for in the PATH 

 

:returns: True if the operation succeeded, False otherwise 

""" 

dirs = ("/usr/sbin", "/usr/local/bin", "/usr/local/sbin") 

path = os.environ["PATH"] 

added = [] 

for d in dirs: 

if d not in path: 

path += os.pathsep + d 

added.append(d) 

 

if any(added): 

logger.debug("Can't find %s, attempting PATH mitigation by adding %s", 

cmd, os.pathsep.join(added)) 

os.environ["PATH"] = path 

 

if util.exe_exists(cmd): 

return True 

else: 

expanded = " expanded" if any(added) else "" 

logger.debug("Failed to find executable %s in%s PATH: %s", cmd, 

expanded, path) 

return False