nscd_selfcred.c revision 29836b1990ff03408750301a4ad20cfd233444b9
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * CDDL HEADER START
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms of the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Common Development and Distribution License (the "License").
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You may not use this file except in compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing permissions
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL HEADER in each
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below this CDDL HEADER, with the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * fields enclosed by brackets "[]" replaced with your own identifying
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * information: Portions Copyright [yyyy] [name of copyright owner]
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * CDDL HEADER END
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Use is subject to license terms.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#pragma ident "%Z%%M% %I% %E% SMI"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterstatic char **execargv;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterstatic void *get_smf_prop(const char *var, char type, void *def_val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/* current self-cred configuration data being used */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterstatic nscd_cfg_global_selfcred_t nscd_selfcred_cfg_g;
static int pu_nscd_ttl;
CHILD_STATE_NONE = 0,
typedef struct _child {
int child_slot;
int child_door;
int next_open;
} child_t;
static int open_head;
static int open_tail;
static int used_slot;
extern int _doorfd;
extern int _whoami;
long activity = 0;
free_slot(int s)
for (i = 0; i < max_pu_nscd; i++)
free_slot(i);
init_slot(int s)
static child_t *
int no_alloc)
for (i = 0; i <= used_slot; i++) {
return (ret);
return (ret);
return (ret);
used_slot++;
used_slot--;
return (ret);
return (ret);
int fd)
int ret;
return (ret);
int ret;
for (i = 0; i <= used_slot; i++) {
int fd)
int ret;
return (ret);
void *arg)
char *fmri;
exit(0);
return (NULL);
void *arg)
return (NULL);
void *buf,
int iam)
int cslot;
int errnum;
switch (iam) {
case NSCD_MAIN:
case NSCD_FORKER:
case NSCD_CHILD:
void *buf,
int iam)
long last_active;
int done = 0;
(void) pause();
while (!done) {
exit(0);
void *buf,
int iam)
int slot;
int ret;
char *fmri;
nscd_fork_t *f;
if (_logfd > 0) {
for (i = 0; i < _logfd; i++)
(void) close(i);
closefrom(0);
(void) setup_ldap_backend();
exit(0);
(void) init_user_proc_monitor();
void *buf,
int doorfd,
int cslot,
int ret;
nscd_fork_t f;
void *buf,
int *door)
int errnum;
int err;
int argc,
char **inargv)
char **newargv;
return (NULL);
return (NULL);
return (NULL);
return (NULL);
return (newargv);
char *path,
int argc,
char **argv)
exit(0);
(void) _nscd_init_cslots();
static nscd_rc_t
char *name,
void **func_p)
void *sym;
return (NSCD_SUCCESS);
return (NSCD_SUCCESS);
return (NSCD_CFG_DLOPEN_ERROR);
return (NSCD_CFG_DLSYM_ERROR);
return (NSCD_SUCCESS);
static int checked = 0;
static int is_on = 0;
static int (*ldap_func)();
int ldap_on = 0;
return (is_on);
is_on = 0;
return (is_on);
static nscd_rc_t
static void (*ldap_func)();
return (NSCD_SUCCESS);
return (rc);
void *buf,
int buf_size)
int errnum = 0;
int ret;
char param,
void *data)
void *data,
void *cookie)
int off;
return (NSCD_SUCCESS);
return (NSCD_SUCCESS);
return (NSCD_SUCCESS);
return (NSCD_SUCCESS);
void *data,
void **cookie)
return (NSCD_SUCCESS);
void **stat,
return (NSCD_SUCCESS);
if (uid == 0) {
goto retry;
int found;
found = 0;
if (found == 0) {
static nscd_rc_t
int errnum;
return (NSCD_THREAD_CREATE_ERROR);
return (NSCD_SUCCESS);
void *val;
if (prop) {
switch (type) {
switch (type) {
return (def_val);