~ubuntu-branches/ubuntu/natty/python3.1/natty-security

« back to all changes in this revision

Viewing changes to Lib/ssl.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2010-07-06 16:52:42 UTC
  • mfrom: (1.2.1 upstream) (2.1.11 sid)
  • Revision ID: james.westby@ubuntu.com-20100706165242-2xv4i019r3et6c0j
Tags: 3.1.2+20100706-1ubuntu1
* Merge with Debian; remaining changes:
  - Regenerate the control file.
  - Add debian/patches/overwrite-semaphore-check for Lucid buildds.

Show diffs side-by-side

added added

removed removed

Lines of Context:
81
81
from socket import socket, AF_INET, SOCK_STREAM
82
82
import base64        # for DER-to-PEM translation
83
83
import traceback
 
84
import errno
84
85
 
85
86
class SSLSocket(socket):
86
87
 
95
96
                 family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None,
96
97
                 suppress_ragged_eofs=True):
97
98
 
 
99
        connected = False
98
100
        if sock is not None:
99
101
            socket.__init__(self,
100
102
                            family=sock.family,
101
103
                            type=sock.type,
102
104
                            proto=sock.proto,
103
105
                            fileno=_dup(sock.fileno()))
 
106
            self.settimeout(sock.gettimeout())
 
107
            # see if it's connected
 
108
            try:
 
109
                sock.getpeername()
 
110
            except socket_error as e:
 
111
                if e.errno != errno.ENOTCONN:
 
112
                    raise
 
113
            else:
 
114
                connected = True
104
115
            sock.close()
105
116
        elif fileno is not None:
106
117
            socket.__init__(self, fileno=fileno)
107
118
        else:
108
119
            socket.__init__(self, family=family, type=type, proto=proto)
109
120
 
110
 
        self._closed = False
111
 
 
112
121
        if certfile and not keyfile:
113
122
            keyfile = certfile
114
 
        # see if it's connected
115
 
        try:
116
 
            socket.getpeername(self)
117
 
        except socket_error:
118
 
            # no, no connection yet
119
 
            self._sslobj = None
120
 
        else:
121
 
            # yes, create the SSL object
 
123
 
 
124
        self._closed = False
 
125
        self._sslobj = None
 
126
        if connected:
 
127
            # create the SSL object
122
128
            try:
123
129
                self._sslobj = _ssl.sslwrap(self, server_side,
124
130
                                            keyfile, certfile,
240
246
        if self._sslobj:
241
247
            if flags != 0:
242
248
                raise ValueError(
243
 
                  "non-zero flags not allowed in calls to recv_into() on %s" %
244
 
                  self.__class__)
245
 
            while True:
246
 
                try:
247
 
                    return self.read(buflen)
248
 
                except SSLError as x:
249
 
                    if x.args[0] == SSL_ERROR_WANT_READ:
250
 
                        continue
251
 
                    else:
252
 
                        raise x
 
249
                    "non-zero flags not allowed in calls to recv() on %s" %
 
250
                    self.__class__)
 
251
            return self.read(buflen)
253
252
        else:
254
253
            return socket.recv(self, buflen, flags)
255
254
 
264
263
                raise ValueError(
265
264
                  "non-zero flags not allowed in calls to recv_into() on %s" %
266
265
                  self.__class__)
267
 
            while True:
268
 
                try:
269
 
                    v = self.read(nbytes, buffer)
270
 
                    return v
271
 
                except SSLError as x:
272
 
                    if x.args[0] == SSL_ERROR_WANT_READ:
273
 
                        continue
274
 
                    else:
275
 
                        raise x
 
266
            return self.read(nbytes, buffer)
276
267
        else:
277
268
            return socket.recv_into(self, buffer, nbytes, flags)
278
269