関数 | |
int | converse (pam_handle_t *, int, int, struct pam_message **, struct pam_response **) |
int | make_remark (pam_handle_t *, unsigned int, int, const char *) |
void | _cleanup (pam_handle_t *, void *, int) |
char * | _pam_delete (register char *) |
void | _log_err (int err, const char *format,...) |
int | set_ctrl (int flags, int argc, const char **argv) |
char * | smbpXstrDup (const char *x) |
void | _cleanup_failures (pam_handle_t *pamh, void *fl, int err) |
変数 | |
char * | servicesf = dyn_CONFIGFILE |
int converse | ( | pam_handle_t * | , | |
int | , | |||
int | , | |||
struct pam_message ** | , | |||
struct pam_response ** | ||||
) |
参照先 _log_err().
00087 { 00088 int retval; 00089 struct pam_conv *conv; 00090 00091 retval = pam_get_item(pamh, PAM_CONV, (const void **) &conv); 00092 if (retval == PAM_SUCCESS) { 00093 00094 retval = conv->conv(nargs, (const struct pam_message **) message 00095 ,response, conv->appdata_ptr); 00096 00097 if (retval != PAM_SUCCESS && on(SMB_DEBUG, ctrl)) { 00098 _log_err(LOG_DEBUG, "conversation failure [%s]" 00099 ,pam_strerror(pamh, retval)); 00100 } 00101 } else { 00102 _log_err(LOG_ERR, "couldn't obtain coversation function [%s]" 00103 ,pam_strerror(pamh, retval)); 00104 } 00105 00106 return retval; /* propagate error status */ 00107 }
int make_remark | ( | pam_handle_t * | , | |
unsigned | int, | |||
int | , | |||
const char * | ||||
) |
void _cleanup | ( | pam_handle_t * | , | |
void * | , | |||
int | ||||
) |
char * _pam_delete | ( | register char * | ) |
void _log_err | ( | int | err, | |
const char * | format, | |||
... | ||||
) |
参照元 _cleanup_failures()・_smb_add_user()・converse()・pam_sm_acct_mgmt()・pam_sm_authenticate()・pam_sm_chauthtok()・set_ctrl()・smbpXstrDup().
00072 { 00073 va_list args; 00074 00075 va_start( args, format ); 00076 openlog( "PAM_smbpass", LOG_CONS | LOG_PID, LOG_AUTH ); 00077 vsyslog( err, format, args ); 00078 va_end( args ); 00079 closelog(); 00080 }
int set_ctrl | ( | int | flags, | |
int | argc, | |||
const char ** | argv | |||
) |
参照先 _log_err()・dyn_CONFIGFILE・SMB_Ctrls::flag・SMB_Ctrls::mask・secrets_init()・servicesf・smb_args.
参照元 pam_sm_acct_mgmt()・pam_sm_authenticate()・pam_sm_chauthtok().
00130 { 00131 int i = 0; 00132 const char *service_file = dyn_CONFIGFILE; 00133 unsigned int ctrl; 00134 00135 ctrl = SMB_DEFAULTS; /* the default selection of options */ 00136 00137 /* set some flags manually */ 00138 00139 /* A good, sane default (matches Samba's behavior). */ 00140 set( SMB__NONULL, ctrl ); 00141 00142 /* initialize service file location */ 00143 service_file=servicesf; 00144 00145 if (flags & PAM_SILENT) { 00146 set( SMB__QUIET, ctrl ); 00147 } 00148 00149 /* Run through the arguments once, looking for an alternate smb config 00150 file location */ 00151 while (i < argc) { 00152 int j; 00153 00154 for (j = 0; j < SMB_CTRLS_; ++j) { 00155 if (smb_args[j].token 00156 && !strncmp(argv[i], smb_args[j].token, strlen(smb_args[j].token))) 00157 { 00158 break; 00159 } 00160 } 00161 00162 if (j == SMB_CONF_FILE) { 00163 service_file = argv[i] + 8; 00164 } 00165 i++; 00166 } 00167 00168 /* Read some options from the Samba config. Can be overridden by 00169 the PAM config. */ 00170 if(lp_load(service_file,True,False,False,True) == False) { 00171 _log_err( LOG_ERR, "Error loading service file %s", service_file ); 00172 } 00173 00174 secrets_init(); 00175 00176 if (lp_null_passwords()) { 00177 set( SMB__NULLOK, ctrl ); 00178 } 00179 00180 /* now parse the rest of the arguments to this module */ 00181 00182 while (argc-- > 0) { 00183 int j; 00184 00185 for (j = 0; j < SMB_CTRLS_; ++j) { 00186 if (smb_args[j].token 00187 && !strncmp(*argv, smb_args[j].token, strlen(smb_args[j].token))) 00188 { 00189 break; 00190 } 00191 } 00192 00193 if (j >= SMB_CTRLS_) { 00194 _log_err( LOG_ERR, "unrecognized option [%s]", *argv ); 00195 } else { 00196 ctrl &= smb_args[j].mask; /* for turning things off */ 00197 ctrl |= smb_args[j].flag; /* for turning things on */ 00198 } 00199 00200 ++argv; /* step to next argument */ 00201 } 00202 00203 /* auditing is a more sensitive version of debug */ 00204 00205 if (on( SMB_AUDIT, ctrl )) { 00206 set( SMB_DEBUG, ctrl ); 00207 } 00208 /* return the set of flags */ 00209 00210 return ctrl; 00211 }
char* smbpXstrDup | ( | const char * | x | ) |
参照先 _log_err().
参照元 _cleanup_failures().
00234 { 00235 register char *newstr = NULL; 00236 00237 if (x != NULL) { 00238 register int i; 00239 00240 for (i = 0; x[i]; ++i); /* length of string */ 00241 if ((newstr = SMB_MALLOC_ARRAY(char, ++i)) == NULL) { 00242 i = 0; 00243 _log_err( LOG_CRIT, "out of memory in smbpXstrDup" ); 00244 } else { 00245 while (i-- > 0) { 00246 newstr[i] = x[i]; 00247 } 00248 } 00249 x = NULL; 00250 } 00251 return newstr; /* return the duplicate or NULL on error */ 00252 }
void _cleanup_failures | ( | pam_handle_t * | pamh, | |
void * | fl, | |||
int | err | |||
) |
参照先 _cleanup()・_cleanup_failures()・_log_err()・_pam_delete()・_pam_smb_approve_pass()・_smb_blankpasswd()・_smb_read_password()・_smb_verify_password()・_pam_failed_auth::agent・converse()・_pam_failed_auth::count・expect()・_pam_failed_auth::id・make_remark()・name・nt_lm_owf_gen()・pdb_get_acct_ctrl()・pdb_get_nt_passwd()・pdb_get_user_sid()・pdb_get_username()・quiet・sid_to_uid()・smbpXstrDup()・uidtoname()・_pam_failed_auth::user.
参照元 _cleanup_failures().
char* servicesf = dyn_CONFIGFILE |