pam_smbpass/support.c

ソースコードを見る。

関数

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 **   
)

support.c84 行で定義されています。

参照先 _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   
)

support.c222 行で定義されています。

参照先 _pam_delete().

参照元 _cleanup_failures().

00223 {
00224     x = _pam_delete( (char *) x );
00225 }

char * _pam_delete ( register char *   ) 

support.c215 行で定義されています。

00216 {
00217     _pam_overwrite( xx );
00218     _pam_drop( xx );
00219     return NULL;
00220 }

void _log_err ( int  err,
const char *  format,
  ... 
)

support.c71 行で定義されています。

参照元 _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 
)

support.c129 行で定義されています。

参照先 _log_err()dyn_CONFIGFILESMB_Ctrls::flagSMB_Ctrls::masksecrets_init()servicesfsmb_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  ) 

support.c233 行で定義されています。

参照先 _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 
)

support.c258 行で定義されています。

参照先 _cleanup()_cleanup_failures()_log_err()_pam_delete()_pam_smb_approve_pass()_smb_blankpasswd()_smb_read_password()_smb_verify_password()_pam_failed_auth::agentconverse()_pam_failed_auth::countexpect()_pam_failed_auth::idmake_remark()nament_lm_owf_gen()pdb_get_acct_ctrl()pdb_get_nt_passwd()pdb_get_user_sid()pdb_get_username()quietsid_to_uid()smbpXstrDup()uidtoname()_pam_failed_auth::user.

参照元 _cleanup_failures().


変数

char* servicesf = dyn_CONFIGFILE

support.c67 行で定義されています。

参照元 set_ctrl().


Sambaに対してSat Aug 29 21:23:58 2009に生成されました。  doxygen 1.4.7