summaryrefslogtreecommitdiffstats
path: root/openpgp-ffi
AgeCommit message (Expand)Author
2020-01-16openpgp: Remove variant VerificationResult::BadChecksum.Justus Winter
2020-01-14openpgp: Rework stream verification logic.Neal H. Walfield
2020-01-14openpgp: Remove unneeded fields from VerificationResult::NotAlive.Neal H. Walfield
2020-01-13openpgp: Add Error variant to VerificationResult.Neal H. Walfield
2020-01-10openpgp: Pass MessageStructure by value, not reference.Neal H. Walfield
2020-01-08openpgp: Include a reference time in KeyAmalgamation.Neal H. Walfield
2020-01-07Fix broken links in the documentation.Justus Winter
2020-01-07openpgp: Include the signing key's amalgamation in results.Justus Winter
2020-01-07openpgp-ffi, ffi: Always rebuild C doctests.Justus Winter
2020-01-07openpgp-ffi: Fix doctest.Justus Winter
2020-01-06openpgp: Pass a timestamp to the KeyIter instead of each filter.Neal H. Walfield
2020-01-02openpgp: Mark enum Error non-exhaustive.Justus Winter
2019-12-20Release 0.13.0.v0.13.0Justus Winter
2019-12-20Remove nettle dependency where it's unnecessaryIgor Matuszewski
2019-12-20openpgp: Simplify key iteration interface.Neal H. Walfield
2019-12-19openpgp: Change KeyIter to return a struct instead of a tuple.Neal H. Walfield
2019-12-18openpgp: Make type aliases for keys pub(crate).Justus Winter
2019-12-11openpgp: Remove KeyIter::empty.Justus Winter
2019-12-09openpgp: Remove Signature::key_expired.Justus Winter
2019-12-09openpgp: Remove Signature::signature_expired.Justus Winter
2019-12-09openpgp: Return result from Cert::alive, remove Cert::expired.Justus Winter
2019-12-09openpgp: Return Result from Signature::key_alive.Justus Winter
2019-12-09openpgp: Return Result from Signature::signature_alive.Justus Winter
2019-12-09openpgp: New errors Expired and NotYetLive.Justus Winter
2019-12-09openpgp, openpgp-ffi: Fix small issues introduced when renaming TPK.Justus Winter
2019-12-05openpgp: Make crypto::{Signer,Decryptor} non-polymorphic.Justus Winter
2019-12-04openpgp: Refine CertBuilder::add_encryption_subkey.Justus Winter
2019-12-04openpgp: Rename KeyFlag's accessors.Justus Winter
2019-12-04openpgp: Rename KeyIter filters.Justus Winter
2019-11-28Call TPKs Certificates, update identifiers, documentation.Justus Winter
2019-11-27openpgp: Fix issuer handling in the streaming verifier.Justus Winter
2019-11-27openpgp: Make variants of VerificationResult struct-like, add infos.Justus Winter
2019-11-26openpgp: Implement From<Fingerprint> for KeyID.Justus Winter
2019-11-25OpenPGP User ID convention is "de facto" not "de factor"Daniel Kahn Gillmor
2019-11-25Release 0.12.0.v0.12.0Justus Winter
2019-11-25openpgp: Specialize key iterator to return Key<SecretParts, _>.Justus Winter
2019-11-25openpgp: Rename openpgp::constants to openpgp::types.Justus Winter
2019-11-22openpgp: Make conversions into Key<SecretParts, _> fallible.Justus Winter
2019-11-21openpgp: When parsing User IDs, recognize URIs.Neal H. Walfield
2019-11-21openpgp: Replace time crate with std::time.Justus Winter
2019-11-20openpgp: Use the builder pattern for stream::Encryptor.Justus Winter
2019-11-19openpgp: Use the builder pattern for stream::LiteralWriter.Justus Winter
2019-11-19openpgp: Use the builder pattern for stream::Signer.Justus Winter
2019-11-19openpgp: Be tolerant when deciding wheter a signature is alive.Neal H. Walfield
2019-11-18Fix more spellingDaniel Kahn Gillmor
2019-11-15openpgp: Add tpk::builder::CipherSuite::RSA4k.Leonhard Markert
2019-11-10openpgp: Distinguish bad signatures from those that are not alive.Neal H. Walfield
2019-11-06openpgp-ffi: Improve documentation.Neal H. Walfield
2019-11-06openpgp: Replace RFC 2822 parser with a de factor parserNeal H. Walfield
2019-10-31Change license to GPLv2+.Neal H. Walfield
class="n">mutex); if (err) return err; } req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_SETLAYOUT, USE_AUTH_MDS); if (IS_ERR(req)) return PTR_ERR(req); req->r_inode = inode; ihold(inode); req->r_inode_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_FILE_EXCL; req->r_args.setlayout.layout.fl_stripe_unit = cpu_to_le32(l.stripe_unit); req->r_args.setlayout.layout.fl_stripe_count = cpu_to_le32(l.stripe_count); req->r_args.setlayout.layout.fl_object_size = cpu_to_le32(l.object_size); req->r_args.setlayout.layout.fl_pg_pool = cpu_to_le32(l.data_pool); req->r_args.setlayout.layout.fl_pg_preferred = cpu_to_le32(l.preferred_osd); parent_inode = ceph_get_dentry_parent_inode(file->f_dentry); err = ceph_mdsc_do_request(mdsc, parent_inode, req); iput(parent_inode); ceph_mdsc_put_request(req); return err; } /* * Set a layout policy on a directory inode. All items in the tree * rooted at this inode will inherit this layout on creation, * (It doesn't apply retroactively ) * unless a subdirectory has its own layout policy. */ static long ceph_ioctl_set_layout_policy (struct file *file, void __user *arg) { struct inode *inode = file->f_dentry->d_inode; struct ceph_mds_request *req; struct ceph_ioctl_layout l; int err, i; struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; /* copy and validate */ if (copy_from_user(&l, arg, sizeof(l))) return -EFAULT; if ((l.object_size & ~PAGE_MASK) || (l.stripe_unit & ~PAGE_MASK) || !l.stripe_unit || (l.object_size && (unsigned)l.object_size % (unsigned)l.stripe_unit)) return -EINVAL; /* make sure it's a valid data pool */ if (l.data_pool > 0) { mutex_lock(&mdsc->mutex); err = -EINVAL; for (i = 0; i < mdsc->mdsmap->m_num_data_pg_pools; i++) if (mdsc->mdsmap->m_data_pg_pools[i] == l.data_pool) { err = 0; break; } mutex_unlock(&mdsc->mutex); if (err) return err; } req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_SETDIRLAYOUT, USE_AUTH_MDS); if (IS_ERR(req)) return PTR_ERR(req); req->r_inode = inode; ihold(inode); req->r_args.setlayout.layout.fl_stripe_unit = cpu_to_le32(l.stripe_unit); req->r_args.setlayout.layout.fl_stripe_count = cpu_to_le32(l.stripe_count); req->r_args.setlayout.layout.fl_object_size = cpu_to_le32(l.object_size); req->r_args.setlayout.layout.fl_pg_pool = cpu_to_le32(l.data_pool); req->r_args.setlayout.layout.fl_pg_preferred = cpu_to_le32(l.preferred_osd); err = ceph_mdsc_do_request(mdsc, inode, req); ceph_mdsc_put_request(req); return err; } /* * Return object name, size/offset information, and location (OSD * number, network address) for a given file offset. */ static long ceph_ioctl_get_dataloc(struct file *file, void __user *arg) { struct ceph_ioctl_dataloc dl; struct inode *inode = file->f_dentry->d_inode; struct ceph_inode_info *ci = ceph_inode(inode); struct ceph_osd_client *osdc = &ceph_sb_to_client(inode->i_sb)->client->osdc; u64 len = 1, olen; u64 tmp; struct ceph_object_layout ol; struct ceph_pg pgid; /* copy and validate */ if (copy_from_user(&dl, arg, sizeof(dl))) return -EFAULT; down_read(&osdc->map_sem); ceph_calc_file_object_mapping(&ci->i_layout, dl.file_offset, &len, &dl.object_no, &dl.object_offset, &olen); dl.file_offset -= dl.object_offset; dl.object_size = ceph_file_layout_object_size(ci->i_layout); dl.block_size = ceph_file_layout_su(ci->i_layout); /* block_offset = object_offset % block_size */ tmp = dl.object_offset; dl.block_offset = do_div(tmp, dl.block_size); snprintf(dl.object_name, sizeof(dl.object_name), "%llx.%08llx", ceph_ino(inode), dl.object_no); ceph_calc_object_layout(&ol, dl.object_name, &ci->i_layout, osdc->osdmap); pgid = ol.ol_pgid; dl.osd = ceph_calc_pg_primary(osdc->osdmap, pgid); if (dl.osd >= 0) { struct ceph_entity_addr *a = ceph_osd_addr(osdc->osdmap, dl.osd); if (a) memcpy(&dl.osd_addr, &a->in_addr, sizeof(dl.osd_addr)); } else { memset(&dl.osd_addr, 0, sizeof(dl.osd_addr)); } up_read(&osdc->map_sem); /* send result back to user */ if (copy_to_user(arg, &dl, sizeof(dl))) return -EFAULT; return 0; } static long ceph_ioctl_lazyio(struct file *file) { struct ceph_file_info *fi = file->private_data; struct inode *inode = file->f_dentry->d_inode; struct ceph_inode_info *ci = ceph_inode(inode); if ((fi->fmode & CEPH_FILE_MODE_LAZY) == 0) { spin_lock(&inode->i_lock); ci->i_nr_by_mode[fi->fmode]--; fi->fmode |= CEPH_FILE_MODE_LAZY; ci->i_nr_by_mode[fi->fmode]++; spin_unlock(&inode->i_lock); dout("ioctl_layzio: file %p marked lazy\n", file); ceph_check_caps(ci, 0, NULL); } else { dout("ioctl_layzio: file %p already lazy\n", file); } return 0; } static long ceph_ioctl_syncio(struct file *file) { struct ceph_file_info *fi = file->private_data;