- Timestamp:
- Feb 2, 2002, 6:22:20 PM (19 years ago)
- Location:
- trunk/lib
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/openpam_dispatch.c
r16 r20 62 62 return (PAM_SYSTEM_ERR); 63 63 64 /* prevent recursion */ 65 if (pamh->dispatching) { 66 openpam_log(PAM_LOG_ERROR, "indirect recursion"); 67 return (PAM_SYSTEM_ERR); 68 } 69 pamh->dispatching = 1; 70 71 /* pick a chain */ 64 72 switch (primitive) { 65 73 case PAM_AUTHENTICATE: … … 78 86 break; 79 87 default: 80 return (PAM_SYSTEM_ERR); 81 } 82 88 pamh->dispatching = 0; 89 return (PAM_SYSTEM_ERR); 90 } 91 92 /* fail if the chain is empty */ 93 if (module == NULL) 94 return (PAM_SYSTEM_ERR); 95 96 /* execute */ 83 97 for (err = fail = 0; module != NULL; module = module->next) { 84 98 if (module->primitive[primitive] == NULL) { 85 99 openpam_log(PAM_LOG_ERROR, "%s: no %s()", 86 100 module->modpath, _pam_sm_func_name[primitive]); 87 return (PAM_SYMBOL_ERR); 88 } 89 r = (module->primitive[primitive])(pamh, flags); 90 openpam_log(PAM_LOG_DEBUG, "%s: %s(): %s", 91 module->modpath, _pam_sm_func_name[primitive], 92 pam_strerror(pamh, r)); 101 pamh->dispatching = 0; 102 r = PAM_SYMBOL_ERR; 103 } else { 104 r = (module->primitive[primitive])(pamh, flags); 105 openpam_log(PAM_LOG_DEBUG, "%s: %s(): %s", 106 module->modpath, _pam_sm_func_name[primitive], 107 pam_strerror(pamh, r)); 108 } 93 109 94 110 if (r == PAM_IGNORE) … … 132 148 } 133 149 134 if (fail) 135 return (err); 136 return (PAM_SUCCESS); 150 pamh->dispatching = 0; 151 return (fail ? err : PAM_SUCCESS); 137 152 } 138 153 -
trunk/lib/openpam_impl.h
r16 r20 92 92 struct pam_handle { 93 93 char *service; 94 int dispatching; 94 95 95 96 /* chains */
Note: See TracChangeset
for help on using the changeset viewer.