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
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
use std::os::raw::{c_char, c_int, c_void};
pub const PWQ_SETTING_DIFF_OK: u32 = 1;
pub const PWQ_SETTING_MIN_LENGTH: u32 = 3;
pub const PWQ_SETTING_DIG_CREDIT: u32 = 4;
pub const PWQ_SETTING_UP_CREDIT: u32 = 5;
pub const PWQ_SETTING_LOW_CREDIT: u32 = 6;
pub const PWQ_SETTING_OTH_CREDIT: u32 = 7;
pub const PWQ_SETTING_MIN_CLASS: u32 = 8;
pub const PWQ_SETTING_MAX_REPEAT: u32 = 9;
pub const PWQ_SETTING_DICT_PATH: u32 = 10;
pub const PWQ_SETTING_MAX_CLASS_REPEAT: u32 = 11;
pub const PWQ_SETTING_GECOS_CHECK: u32 = 12;
pub const PWQ_SETTING_BAD_WORDS: u32 = 13;
pub const PWQ_SETTING_MAX_SEQUENCE: u32 = 14;
pub const PWQ_SETTING_DICT_CHECK: u32 = 15;
pub const PWQ_SETTING_USER_CHECK: u32 = 16;
pub const PWQ_SETTING_ENFORCING: u32 = 17;
pub const PWQ_SETTING_RETRY_TIMES: u32 = 18;
pub const PWQ_SETTING_ENFORCE_ROOT: u32 = 19;
pub const PWQ_SETTING_LOCAL_USERS: u32 = 20;
pub const PWQ_SETTING_USER_SUBSTR: u32 = 21;
pub const PWQ_MAX_ENTROPY_BITS: u32 = 256;
pub const PWQ_MIN_ENTROPY_BITS: u32 = 56;
pub const PWQ_MAX_ERROR_MESSAGE_LEN: u32 = 256;
pub const PWQ_ERROR_SUCCESS: i32 = 0;
pub const PWQ_ERROR_FATAL_FAILURE: i32 = -1;
pub const PWQ_ERROR_INTEGER: i32 = -2;
pub const PWQ_ERROR_CFGFILE_OPEN: i32 = -3;
pub const PWQ_ERROR_CFGFILE_MALFORMED: i32 = -4;
pub const PWQ_ERROR_UNKNOWN_SETTING: i32 = -5;
pub const PWQ_ERROR_NON_INT_SETTING: i32 = -6;
pub const PWQ_ERROR_NON_STR_SETTING: i32 = -7;
pub const PWQ_ERROR_MEM_ALLOC: i32 = -8;
pub const PWQ_ERROR_TOO_SIMILAR: i32 = -9;
pub const PWQ_ERROR_MIN_DIGITS: i32 = -10;
pub const PWQ_ERROR_MIN_UPPERS: i32 = -11;
pub const PWQ_ERROR_MIN_LOWERS: i32 = -12;
pub const PWQ_ERROR_MIN_OTHERS: i32 = -13;
pub const PWQ_ERROR_MIN_LENGTH: i32 = -14;
pub const PWQ_ERROR_PALINDROME: i32 = -15;
pub const PWQ_ERROR_CASE_CHANGES_ONLY: i32 = -16;
pub const PWQ_ERROR_ROTATED: i32 = -17;
pub const PWQ_ERROR_MIN_CLASSES: i32 = -18;
pub const PWQ_ERROR_MAX_CONSECUTIVE: i32 = -19;
pub const PWQ_ERROR_EMPTY_PASSWORD: i32 = -20;
pub const PWQ_ERROR_SAME_PASSWORD: i32 = -21;
pub const PWQ_ERROR_CRACKLIB_CHECK: i32 = -22;
pub const PWQ_ERROR_RNG: i32 = -23;
pub const PWQ_ERROR_GENERATION_FAILED: i32 = -24;
pub const PWQ_ERROR_USER_CHECK: i32 = -25;
pub const PWQ_ERROR_GECOS_CHECK: i32 = -26;
pub const PWQ_ERROR_MAX_CLASS_REPEAT: i32 = -27;
pub const PWQ_ERROR_BAD_WORDS: i32 = -28;
pub const PWQ_ERROR_MAX_SEQUENCE: i32 = -29;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct pwquality_settings {
_unused: [u8; 0],
}
pub type pwquality_settings_t = pwquality_settings;
extern "C" {
pub fn pwquality_default_settings() -> *mut pwquality_settings_t;
pub fn pwquality_free_settings(pwq: *mut pwquality_settings_t);
pub fn pwquality_read_config(
pwq: *mut pwquality_settings_t,
cfgfile: *const c_char,
auxerror: *mut *mut c_void,
) -> c_int;
pub fn pwquality_set_option(pwq: *mut pwquality_settings_t, option: *const c_char) -> c_int;
pub fn pwquality_set_int_value(
pwq: *mut pwquality_settings_t,
setting: c_int,
value: c_int,
) -> c_int;
pub fn pwquality_set_str_value(
pwq: *mut pwquality_settings_t,
setting: c_int,
value: *const c_char,
) -> c_int;
pub fn pwquality_get_int_value(
pwq: *mut pwquality_settings_t,
setting: c_int,
value: *mut c_int,
) -> c_int;
pub fn pwquality_get_str_value(
pwq: *mut pwquality_settings_t,
setting: c_int,
value: *mut *const c_char,
) -> c_int;
pub fn pwquality_generate(
pwq: *mut pwquality_settings_t,
entropy_bits: c_int,
password: *mut *mut c_char,
) -> c_int;
pub fn pwquality_check(
pwq: *mut pwquality_settings_t,
password: *const c_char,
oldpassword: *const c_char,
user: *const c_char,
auxerror: *mut *mut c_void,
) -> c_int;
pub fn pwquality_strerror(
buf: *mut c_char,
len: usize,
errcode: c_int,
auxerror: *mut c_void,
) -> *const c_char;
}