Changeset 137 in openpam
- Timestamp:
- May 2, 2002, 6:08:02 AM (19 years ago)
- Location:
- trunk/lib
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/openpam_configure.c
r112 r137 32 32 * SUCH DAMAGE. 33 33 * 34 * $P4: //depot/projects/openpam/lib/openpam_configure.c# 1$34 * $P4: //depot/projects/openpam/lib/openpam_configure.c#2 $ 35 35 */ 36 36 … … 51 51 52 52 static int 53 openpam_read_policy_file(pam_ handle_t *pamh,53 openpam_read_policy_file(pam_chain_t *policy[], 54 54 const char *service, 55 55 const char *filename, … … 187 187 * appropriate chain and bump the counter. 188 188 */ 189 r = openpam_add_module(p amh, chain, flag, p, optc, optv);189 r = openpam_add_module(policy, chain, flag, p, optc, optv); 190 190 if (r != PAM_SUCCESS) 191 191 return (-r); … … 215 215 }; 216 216 217 /* 218 * OpenPAM internal 219 * 220 * Configure a service 221 */ 222 223 int 224 openpam_configure(pam_handle_t *pamh, 217 static int 218 openpam_load_policy(pam_chain_t *policy[], 225 219 const char *service) 226 220 { … … 236 230 if (filename == NULL) { 237 231 openpam_log(PAM_LOG_ERROR, "malloc(): %m"); 238 return ( PAM_BUF_ERR);232 return (-PAM_BUF_ERR); 239 233 } 240 234 strcpy(filename, *path); 241 235 strcat(filename, service); 242 r = openpam_read_policy_file(p amh,236 r = openpam_read_policy_file(policy, 243 237 service, filename, PAM_D_STYLE); 244 238 free(filename); 245 239 } else { 246 r = openpam_read_policy_file(p amh,240 r = openpam_read_policy_file(policy, 247 241 service, *path, PAM_CONF_STYLE); 248 242 } 249 if (r < 0) 250 return (-r); 251 if (r > 0) 252 return (PAM_SUCCESS); 253 } 254 255 return (PAM_SYSTEM_ERR); 243 if (r != 0) 244 return (r); 245 } 246 247 return (0); 248 } 249 250 /* 251 * OpenPAM internal 252 * 253 * Configure a service 254 */ 255 256 int 257 openpam_configure(pam_handle_t *pamh, 258 const char *service) 259 { 260 pam_chain_t *other[PAM_NUM_CHAINS]; 261 int i, n, r; 262 263 /* try own configuration first */ 264 r = openpam_load_policy(pamh->chains, service); 265 if (r < 0) 266 return (-r); 267 for (i = n = 0; i < PAM_NUM_CHAINS; ++i) { 268 if (pamh->chains[i] != NULL) 269 ++n; 270 } 271 if (n == PAM_NUM_CHAINS) 272 return (PAM_SUCCESS); 273 274 /* fill in the blanks with "other" */ 275 openpam_load_policy(other, PAM_OTHER); 276 if (r < 0) 277 return (-r); 278 for (i = n = 0; i < PAM_NUM_CHAINS; ++i) { 279 if (pamh->chains[i] == NULL) { 280 pamh->chains[i] = other[i]; 281 other[i] = NULL; 282 } 283 if (pamh->chains[i] != NULL) 284 ++n; 285 } 286 openpam_clear_chains(other); 287 return (n > 0 ? PAM_SUCCESS : PAM_SYSTEM_ERR); 256 288 } 257 289 -
trunk/lib/openpam_impl.h
r112 r137 32 32 * SUCH DAMAGE. 33 33 * 34 * $P4: //depot/projects/openpam/lib/openpam_impl.h#1 3$34 * $P4: //depot/projects/openpam/lib/openpam_impl.h#14 $ 35 35 */ 36 36 … … 109 109 int openpam_dispatch(pam_handle_t *, int, int); 110 110 int openpam_findenv(pam_handle_t *, const char *, size_t); 111 int openpam_add_module(pam_ handle_t*, int, int,111 int openpam_add_module(pam_chain_t **, int, int, 112 112 const char *, int, const char **); 113 void openpam_clear_chains(pam_ handle_t*);113 void openpam_clear_chains(pam_chain_t **); 114 114 115 115 #ifdef OPENPAM_STATIC_MODULES -
trunk/lib/openpam_load.c
r94 r137 32 32 * SUCH DAMAGE. 33 33 * 34 * $P4: //depot/projects/openpam/lib/openpam_load.c#1 2$34 * $P4: //depot/projects/openpam/lib/openpam_load.c#13 $ 35 35 */ 36 36 … … 157 157 158 158 int 159 openpam_add_module(pam_ handle_t *pamh,159 openpam_add_module(pam_chain_t *policy[], 160 160 int chain, 161 161 int flag, … … 179 179 return (PAM_OPEN_ERR); 180 180 } 181 if ((iterator = p amh->chains[chain]) != NULL) {181 if ((iterator = policy[chain]) != NULL) { 182 182 while (iterator->next != NULL) 183 183 iterator = iterator->next; 184 184 iterator->next = new; 185 185 } else { 186 p amh->chains[chain] = new;186 policy[chain] = new; 187 187 } 188 188 return (PAM_SUCCESS); … … 200 200 201 201 void 202 openpam_clear_chains(pam_ handle_t *pamh)202 openpam_clear_chains(pam_chain_t *policy[]) 203 203 { 204 204 int i; 205 205 206 206 for (i = 0; i < PAM_NUM_CHAINS; ++i) 207 openpam_destroy_chain(p amh->chains[i]);207 openpam_destroy_chain(policy[i]); 208 208 } 209 209 -
trunk/lib/pam_end.c
r93 r137 32 32 * SUCH DAMAGE. 33 33 * 34 * $P4: //depot/projects/openpam/lib/pam_end.c# 8$34 * $P4: //depot/projects/openpam/lib/pam_end.c#9 $ 35 35 */ 36 36 … … 73 73 74 74 /* clear chains */ 75 openpam_clear_chains(pamh );75 openpam_clear_chains(pamh->chains); 76 76 77 77 /* clear items */ -
trunk/lib/pam_start.c
r112 r137 32 32 * SUCH DAMAGE. 33 33 * 34 * $P4: //depot/projects/openpam/lib/pam_start.c#1 3$34 * $P4: //depot/projects/openpam/lib/pam_start.c#14 $ 35 35 */ 36 36 … … 67 67 68 68 r = openpam_configure(ph, service); 69 if (r != PAM_SUCCESS && r != PAM_BUF_ERR)70 r = openpam_configure(ph, PAM_OTHER);71 69 if (r != PAM_SUCCESS) 72 70 goto fail;
Note: See TracChangeset
for help on using the changeset viewer.