gio/credentials.rs
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
// Take a look at the license at the top of the repository in the LICENSE file.
use glib::translate::*;
use crate::{ffi, Credentials, CredentialsType};
impl Credentials {
/// Gets a pointer to native credentials of type @native_type from
/// @self.
///
/// It is a programming error (which will cause a warning to be
/// logged) to use this method if there is no #GCredentials support for
/// the OS or if @native_type isn't supported by the OS.
/// ## `native_type`
/// The type of native credentials to get.
///
/// # Returns
///
/// The pointer to native credentials or
/// [`None`] if there is no #GCredentials support for the OS or if @native_type
/// isn't supported by the OS. Do not free the returned data, it is owned
/// by @self.
#[doc(alias = "g_credentials_get_native")]
#[doc(alias = "get_native")]
pub fn native(&self, native_type: CredentialsType) -> glib::ffi::gpointer {
unsafe { ffi::g_credentials_get_native(self.to_glib_none().0, native_type.into_glib()) }
}
/// Tries to get the UNIX process identifier from @self. This
/// method is only available on UNIX platforms.
///
/// This operation can fail if #GCredentials is not supported on the
/// OS or if the native credentials type does not contain information
/// about the UNIX process ID.
///
/// # Returns
///
/// The UNIX process ID, or `-1` if @error is set.
#[cfg(unix)]
#[cfg_attr(docsrs, doc(cfg(unix)))]
#[doc(alias = "g_credentials_get_unix_pid")]
#[doc(alias = "get_unix_pid")]
pub fn unix_pid(&self) -> Result<libc::pid_t, glib::Error> {
unsafe {
let mut error = std::ptr::null_mut();
let ret = ffi::g_credentials_get_unix_pid(self.to_glib_none().0, &mut error);
if error.is_null() {
Ok(ret)
} else {
Err(from_glib_full(error))
}
}
}
/// Tries to get the UNIX user identifier from @self. This
/// method is only available on UNIX platforms.
///
/// This operation can fail if #GCredentials is not supported on the
/// OS or if the native credentials type does not contain information
/// about the UNIX user.
///
/// # Returns
///
/// The UNIX user identifier or `-1` if @error is set.
#[cfg(unix)]
#[cfg_attr(docsrs, doc(cfg(unix)))]
#[doc(alias = "g_credentials_get_unix_user")]
#[doc(alias = "get_unix_user")]
pub fn unix_user(&self) -> Result<libc::uid_t, glib::Error> {
unsafe {
let mut error = std::ptr::null_mut();
let ret = ffi::g_credentials_get_unix_user(self.to_glib_none().0, &mut error);
if error.is_null() {
Ok(ret)
} else {
Err(from_glib_full(error))
}
}
}
/// Copies the native credentials of type @native_type from @native
/// into @self.
///
/// It is a programming error (which will cause a warning to be
/// logged) to use this method if there is no #GCredentials support for
/// the OS or if @native_type isn't supported by the OS.
/// ## `native_type`
/// The type of native credentials to set.
/// ## `native`
/// A pointer to native credentials.
#[doc(alias = "g_credentials_set_native")]
pub unsafe fn set_native(&self, native_type: CredentialsType, native: glib::ffi::gpointer) {
unsafe {
ffi::g_credentials_set_native(self.to_glib_none().0, native_type.into_glib(), native)
}
}
/// Tries to set the UNIX user identifier on @self. This method
/// is only available on UNIX platforms.
///
/// This operation can fail if #GCredentials is not supported on the
/// OS or if the native credentials type does not contain information
/// about the UNIX user. It can also fail if the OS does not allow the
/// use of "spoofed" credentials.
/// ## `uid`
/// The UNIX user identifier to set.
///
/// # Returns
///
/// [`true`] if @uid was set, [`false`] if error is set.
#[cfg(unix)]
#[cfg_attr(docsrs, doc(cfg(unix)))]
#[doc(alias = "g_credentials_set_unix_user")]
pub fn set_unix_user(&self, uid: libc::uid_t) -> Result<(), glib::Error> {
unsafe {
let mut error = std::ptr::null_mut();
let is_ok = ffi::g_credentials_set_unix_user(self.to_glib_none().0, uid, &mut error);
debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
}