def check_writable_file(filename): """ Determine if the file is writable. If the file doesn't exist then open the file to test writability. """ if filename is None: raise errors.FileError(reason=_('Filename is empty')) try: if os.path.exists(filename): if not os.access(filename, os.W_OK): raise errors.FileError(reason=_('Permission denied: %(file)s') % dict(file=filename)) else: fp = open(filename, 'w') fp.close() except (IOError, OSError) as e: raise errors.FileError(reason=str(e))
def write_certificate(cert, filename): """ Write the certificate to a file in PEM format. :param cert: cryptograpy ``Certificate`` object """ try: with open(filename, 'wb') as fp: fp.write(cert.public_bytes(Encoding.PEM)) except (IOError, OSError) as e: raise errors.FileError(reason=str(e))
def write_certificate(cert, filename): """ Write the certificate to a file in PEM format. The cert value can be either DER or PEM-encoded, it will be normalized to DER regardless, then back out to PEM. """ try: with open(filename, 'wb') as fp: fp.write(cert.public_bytes(Encoding.PEM)) except (IOError, OSError) as e: raise errors.FileError(reason=str(e))
def write_certificate_list(certs, filename): """ Write a list of certificates to a file in PEM format. :param certs: a list of IPACertificate objects to be written to a file :param filename: a path to the file the certificates should be written into """ try: with open(filename, 'wb') as f: for cert in certs: f.write(cert.public_bytes(Encoding.PEM)) except (IOError, OSError) as e: raise errors.FileError(reason=str(e))
def write_certificate(rawcert, filename): """ Write the certificate to a file in PEM format. The cert value can be either DER or PEM-encoded, it will be normalized to DER regardless, then back out to PEM. """ dercert = normalize_certificate(rawcert) try: fp = open(filename, 'w') fp.write(make_pem(base64.b64encode(dercert))) fp.close() except (IOError, OSError) as e: raise errors.FileError(reason=str(e))
def forward(self, *keys, **options): # pop `out` before sending to server as it is only client side option out = options.pop('out', None) if out: util.check_writable_file(out) res = super(dns_update_system_records, self).forward(*keys, **options) if out and 'result' in res: try: with open(out, "w") as f: self._nsupdate_output_file(f, res['result']) except (OSError, IOError) as e: raise errors.FileError(reason=unicode(e)) return res
def write_pem_private_key(priv_key, filename): """ Write a private key to a file in PEM format. Will force 0x600 permissions on file. :param priv_key: cryptography ``PrivateKey`` object """ try: with open(filename, 'wb') as fp: os.fchmod(fp.fileno(), 0o600) fp.write( priv_key.private_bytes(Encoding.PEM, PrivateFormat.TraditionalOpenSSL, serialization.NoEncryption())) except (IOError, OSError) as e: raise errors.FileError(reason=str(e))
def write_certificate_list(rawcerts, filename): """ Write a list of certificates to a file in PEM format. The cert values can be either DER or PEM-encoded, they will be normalized to DER regardless, then back out to PEM. """ dercerts = [normalize_certificate(rawcert) for rawcert in rawcerts] try: with open(filename, 'w') as f: for cert in dercerts: cert = base64.b64encode(cert) cert = make_pem(cert) f.write(cert + '\n') except (IOError, OSError) as e: raise errors.FileError(reason=str(e))
def write_pem_private_key(priv_key, filename, passwd=None): """ Write a private key to a file in PEM format. Will force 0x600 permissions on file. :param priv_key: cryptography ``PrivateKey`` object :param passwd: ``bytes`` representing the password to store the private key with """ if passwd is not None: enc_alg = serialization.BestAvailableEncryption(passwd) else: enc_alg = serialization.NoEncryption() try: with open(filename, 'wb') as fp: os.fchmod(fp.fileno(), 0o600) fp.write( priv_key.private_bytes(Encoding.PEM, PrivateFormat.TraditionalOpenSSL, encryption_algorithm=enc_alg)) except (IOError, OSError) as e: raise errors.FileError(reason=str(e))