(root)/
Linux-PAM-1.5.3/
modules/
pam_debug/
pam_debug.c
       1  /*
       2   * pam_debug module
       3   *
       4   * Written by Andrew Morgan <morgan@kernel.org> 2001/02/04
       5   *
       6   * This module is intended as a debugging aide for determining how
       7   * the PAM stack is operating.
       8   */
       9  
      10  #include "config.h"
      11  #include <stdio.h>
      12  
      13  #include <security/pam_modules.h>
      14  #include <security/_pam_macros.h>
      15  #include <security/pam_ext.h>
      16  
      17  #define _PAM_ACTION_UNDEF (-10)
      18  #include "../../libpam/pam_tokens.h"
      19  
      20  #define DEFAULT_USER "nobody"
      21  
      22  /* --- authentication management functions --- */
      23  
      24  static int state(pam_handle_t *pamh, const char *text)
      25  {
      26      int retval;
      27  
      28      retval = pam_info (pamh, "%s", text);
      29  
      30      if (retval != PAM_SUCCESS) {
      31  	D(("pam_info failed"));
      32      }
      33  
      34      return retval;
      35  }
      36  
      37  static int parse_args(int retval, const char *event,
      38  		      pam_handle_t *pamh, int argc, const char **argv)
      39  {
      40      int i;
      41  
      42      for (i=0; i<argc; ++i) {
      43  	int length = strlen(event);
      44  	if (!strncmp(event, argv[i], length) && (argv[i][length] == '=')) {
      45  	    int j;
      46  	    const char *return_string = argv[i] + (length+1);
      47  
      48  	    for (j=0; j<_PAM_RETURN_VALUES; ++j) {
      49  		if (!strcmp(return_string, _pam_token_returns[j])) {
      50  		    retval = j;
      51  		    state(pamh, argv[i]);
      52  		    break;
      53  		}
      54  	    }
      55  	    break;
      56  	}
      57      }
      58  
      59      return retval;
      60  }
      61  
      62  int pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED,
      63  			int argc, const char **argv)
      64  {
      65      return parse_args(PAM_SUCCESS, "auth", pamh, argc, argv);
      66  }
      67  
      68  int pam_sm_setcred(pam_handle_t *pamh, int flags UNUSED,
      69  		   int argc, const char **argv)
      70  {
      71      return parse_args(PAM_SUCCESS, "cred", pamh, argc, argv);
      72  }
      73  
      74  /* --- account management functions --- */
      75  
      76  int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags UNUSED,
      77  		     int argc, const char **argv)
      78  {
      79      return parse_args(PAM_SUCCESS, "acct", pamh, argc, argv);
      80  }
      81  
      82  /* --- password management --- */
      83  
      84  int pam_sm_chauthtok(pam_handle_t *pamh, int flags UNUSED,
      85  		     int argc, const char **argv)
      86  {
      87      if (flags & PAM_PRELIM_CHECK) {
      88  	return parse_args(PAM_SUCCESS, "prechauthtok", pamh, argc, argv);
      89      } else {
      90  	return parse_args(PAM_SUCCESS, "chauthtok", pamh, argc, argv);
      91      }
      92  }
      93  
      94  /* --- session management --- */
      95  
      96  int pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED,
      97  			int argc, const char **argv)
      98  {
      99      return parse_args(PAM_SUCCESS, "open_session", pamh, argc, argv);
     100  }
     101  
     102  int pam_sm_close_session(pam_handle_t *pamh, int flags UNUSED,
     103  			 int argc, const char **argv)
     104  {
     105      return parse_args(PAM_SUCCESS, "close_session", pamh, argc, argv);
     106  }
     107  
     108  /* end of module definition */