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

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

# Authors: Simo Sorce <ssorce@redhat.com> 

# 

# Copyright (C) 2007    Red Hat 

# see file 'COPYING' for use and warranty information 

# 

# This program is free software; you can redistribute it and/or modify 

# it under the terms of the GNU General Public License as published by 

# the Free Software Foundation, either version 3 of the License, or 

# (at your option) any later version. 

# 

# This program is distributed in the hope that it will be useful, 

# but WITHOUT ANY WARRANTY; without even the implied warranty of 

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    See the 

# GNU General Public License for more details. 

# 

# You should have received a copy of the GNU General Public License 

# along with this program.  If not, see <http://www.gnu.org/licenses/>. 

# 

 

import xmlrpclib 

import re 

 

def realm_to_suffix(realm_name): 

    """ 

    Convert a kerberos realm into the IPA suffix. 

    """ 

    s = realm_name.split(".") 

    terms = ["dc=" + x.lower() for x in s] 

    return ",".join(terms) 

 

class CIDict(dict): 

    """ 

    Case-insensitive but case-respecting dictionary. 

 

    This code is derived from python-ldap's cidict.py module, 

    written by stroeder: http://python-ldap.sourceforge.net/ 

 

    This version extends 'dict' so it works properly with TurboGears. 

    If you extend UserDict, isinstance(foo, dict) returns false. 

    """ 

 

    def __init__(self, default=None): 

        super(CIDict, self).__init__() 

        self._keys = {} 

        self.update(default or {}) 

 

    def __getitem__(self, key): 

        return super(CIDict, self).__getitem__(key.lower()) 

 

    def __setitem__(self, key, value): 

        lower_key = key.lower() 

        self._keys[lower_key] = key 

        return super(CIDict, self).__setitem__(lower_key, value) 

 

    def __delitem__(self, key): 

        lower_key = key.lower() 

        del self._keys[lower_key] 

        return super(CIDict, self).__delitem__(key.lower()) 

 

    def update(self, dict): 

        for key in dict.keys(): 

            self[key] = dict[key] 

 

    def has_key(self, key): 

        return super(CIDict, self).has_key(key.lower()) 

 

    def get(self, key, failobj=None): 

        try: 

            return self[key] 

        except KeyError: 

            return failobj 

 

    def keys(self): 

        return self._keys.values() 

 

    def items(self): 

        result = [] 

        for k in self._keys.values(): 

            result.append((k, self[k])) 

        return result 

 

    def copy(self): 

        copy = {} 

        for k in self._keys.values(): 

            copy[k] = self[k] 

        return copy 

 

    def iteritems(self): 

        return self.copy().iteritems() 

 

    def iterkeys(self): 

        return self.copy().iterkeys() 

 

    def setdefault(self, key, value=None): 

        try: 

            return self[key] 

        except KeyError: 

            self[key] = value 

            return value 

 

    def pop(self, key, *args): 

        try: 

            value = self[key] 

            del self[key] 

            return value 

        except KeyError: 

            if len(args) == 1: 

                return args[0] 

            raise 

 

    def popitem(self): 

        (lower_key, value) = super(CIDict, self).popitem() 

        key = self._keys[lower_key] 

        del self._keys[lower_key] 

 

        return (key, value) 

 

 

def get_gsserror(e): 

    """A GSSError exception looks differently in python 2.4 than it does 

       in python 2.5, deal with it.""" 

 

    try: 

        primary = e[0] 

        secondary = e[1] 

    except Exception: 

        primary = e[0][0] 

        secondary = e[0][1] 

 

    return (primary[0], secondary[0]) 

 

def utf8_encode_value(value): 

    if isinstance(value, unicode): 

        return value.encode('utf-8') 

    return value 

 

def utf8_encode_values(values): 

    if isinstance(values, list) or isinstance(values, tuple): 

        return map(utf8_encode_value, values) 

    else: 

        return utf8_encode_value(values)