Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/nslcd/nslcd.c
diff options
context:
space:
mode:
Diffstat (limited to 'nslcd/nslcd.c')
-rw-r--r--nslcd/nslcd.c78
1 files changed, 40 insertions, 38 deletions
diff --git a/nslcd/nslcd.c b/nslcd/nslcd.c
index a4c5dca..b0510a8 100644
--- a/nslcd/nslcd.c
+++ b/nslcd/nslcd.c
@@ -118,7 +118,7 @@ static void parse_cmdline(int argc,char *argv[])
switch (optc)
{
case 'd': /* -d, --debug don't fork and print debugging to stderr */
- nslcd_debugging=1;
+ nslcd_debugging++;
log_setdefaultloglevel(LOG_DEBUG);
break;
case 'h': /* --help display this help and exit */
@@ -334,7 +334,7 @@ static int read_header(TFILE *fp,int32_t *action)
/* read a request message, returns <0 in case of errors,
this function closes the socket */
-static void handleconnection(int sock)
+static void handleconnection(int sock,MYLDAP_SESSION *session)
{
TFILE *fp;
socklen_t alen;
@@ -384,36 +384,36 @@ static void handleconnection(int sock)
/* handle request */
switch (action)
{
- case NSLCD_ACTION_ALIAS_BYNAME: (void)nslcd_alias_byname(fp); break;
- case NSLCD_ACTION_ALIAS_ALL: (void)nslcd_alias_all(fp); break;
- case NSLCD_ACTION_ETHER_BYNAME: (void)nslcd_ether_byname(fp); break;
- case NSLCD_ACTION_ETHER_BYETHER: (void)nslcd_ether_byether(fp); break;
- case NSLCD_ACTION_ETHER_ALL: (void)nslcd_ether_all(fp); break;
- case NSLCD_ACTION_GROUP_BYNAME: (void)nslcd_group_byname(fp); break;
- case NSLCD_ACTION_GROUP_BYGID: (void)nslcd_group_bygid(fp); break;
- case NSLCD_ACTION_GROUP_BYMEMBER: (void)nslcd_group_bymember(fp); break;
- case NSLCD_ACTION_GROUP_ALL: (void)nslcd_group_all(fp); break;
- case NSLCD_ACTION_HOST_BYNAME: (void)nslcd_host_byname(fp); break;
- case NSLCD_ACTION_HOST_BYADDR: (void)nslcd_host_byaddr(fp); break;
- case NSLCD_ACTION_HOST_ALL: (void)nslcd_host_all(fp); break;
- case NSLCD_ACTION_NETGROUP_BYNAME: (void)nslcd_netgroup_byname(fp); break;
- case NSLCD_ACTION_NETWORK_BYNAME: (void)nslcd_network_byname(fp); break;
- case NSLCD_ACTION_NETWORK_BYADDR: (void)nslcd_network_byaddr(fp); break;
- case NSLCD_ACTION_NETWORK_ALL: (void)nslcd_network_all(fp); break;
- case NSLCD_ACTION_PASSWD_BYNAME: (void)nslcd_passwd_byname(fp); break;
- case NSLCD_ACTION_PASSWD_BYUID: (void)nslcd_passwd_byuid(fp); break;
- case NSLCD_ACTION_PASSWD_ALL: (void)nslcd_passwd_all(fp); break;
- case NSLCD_ACTION_PROTOCOL_BYNAME: (void)nslcd_protocol_byname(fp); break;
- case NSLCD_ACTION_PROTOCOL_BYNUMBER:(void)nslcd_protocol_bynumber(fp); break;
- case NSLCD_ACTION_PROTOCOL_ALL: (void)nslcd_protocol_all(fp); break;
- case NSLCD_ACTION_RPC_BYNAME: (void)nslcd_rpc_byname(fp); break;
- case NSLCD_ACTION_RPC_BYNUMBER: (void)nslcd_rpc_bynumber(fp); break;
- case NSLCD_ACTION_RPC_ALL: (void)nslcd_rpc_all(fp); break;
- case NSLCD_ACTION_SERVICE_BYNAME: (void)nslcd_service_byname(fp); break;
- case NSLCD_ACTION_SERVICE_BYNUMBER: (void)nslcd_service_bynumber(fp); break;
- case NSLCD_ACTION_SERVICE_ALL: (void)nslcd_service_all(fp); break;
- case NSLCD_ACTION_SHADOW_BYNAME: (void)nslcd_shadow_byname(fp); break;
- case NSLCD_ACTION_SHADOW_ALL: (void)nslcd_shadow_all(fp); break;
+ case NSLCD_ACTION_ALIAS_BYNAME: (void)nslcd_alias_byname(fp,session); break;
+ case NSLCD_ACTION_ALIAS_ALL: (void)nslcd_alias_all(fp,session); break;
+ case NSLCD_ACTION_ETHER_BYNAME: (void)nslcd_ether_byname(fp,session); break;
+ case NSLCD_ACTION_ETHER_BYETHER: (void)nslcd_ether_byether(fp,session); break;
+ case NSLCD_ACTION_ETHER_ALL: (void)nslcd_ether_all(fp,session); break;
+ case NSLCD_ACTION_GROUP_BYNAME: (void)nslcd_group_byname(fp,session); break;
+ case NSLCD_ACTION_GROUP_BYGID: (void)nslcd_group_bygid(fp,session); break;
+ case NSLCD_ACTION_GROUP_BYMEMBER: (void)nslcd_group_bymember(fp,session); break;
+ case NSLCD_ACTION_GROUP_ALL: (void)nslcd_group_all(fp,session); break;
+ case NSLCD_ACTION_HOST_BYNAME: (void)nslcd_host_byname(fp,session); break;
+ case NSLCD_ACTION_HOST_BYADDR: (void)nslcd_host_byaddr(fp,session); break;
+ case NSLCD_ACTION_HOST_ALL: (void)nslcd_host_all(fp,session); break;
+ case NSLCD_ACTION_NETGROUP_BYNAME: (void)nslcd_netgroup_byname(fp,session); break;
+ case NSLCD_ACTION_NETWORK_BYNAME: (void)nslcd_network_byname(fp,session); break;
+ case NSLCD_ACTION_NETWORK_BYADDR: (void)nslcd_network_byaddr(fp,session); break;
+ case NSLCD_ACTION_NETWORK_ALL: (void)nslcd_network_all(fp,session); break;
+ case NSLCD_ACTION_PASSWD_BYNAME: (void)nslcd_passwd_byname(fp,session); break;
+ case NSLCD_ACTION_PASSWD_BYUID: (void)nslcd_passwd_byuid(fp,session); break;
+ case NSLCD_ACTION_PASSWD_ALL: (void)nslcd_passwd_all(fp,session); break;
+ case NSLCD_ACTION_PROTOCOL_BYNAME: (void)nslcd_protocol_byname(fp,session); break;
+ case NSLCD_ACTION_PROTOCOL_BYNUMBER:(void)nslcd_protocol_bynumber(fp,session); break;
+ case NSLCD_ACTION_PROTOCOL_ALL: (void)nslcd_protocol_all(fp,session); break;
+ case NSLCD_ACTION_RPC_BYNAME: (void)nslcd_rpc_byname(fp,session); break;
+ case NSLCD_ACTION_RPC_BYNUMBER: (void)nslcd_rpc_bynumber(fp,session); break;
+ case NSLCD_ACTION_RPC_ALL: (void)nslcd_rpc_all(fp,session); break;
+ case NSLCD_ACTION_SERVICE_BYNAME: (void)nslcd_service_byname(fp,session); break;
+ case NSLCD_ACTION_SERVICE_BYNUMBER: (void)nslcd_service_bynumber(fp,session); break;
+ case NSLCD_ACTION_SERVICE_ALL: (void)nslcd_service_all(fp,session); break;
+ case NSLCD_ACTION_SHADOW_BYNAME: (void)nslcd_shadow_byname(fp,session); break;
+ case NSLCD_ACTION_SHADOW_ALL: (void)nslcd_shadow_all(fp,session); break;
default:
log_log(LOG_WARNING,"invalid request id: %d",(int)action);
break;
@@ -425,7 +425,7 @@ static void handleconnection(int sock)
}
/* accept a connection on the socket */
-static void acceptconnection(void)
+static void acceptconnection(MYLDAP_SESSION *session)
{
int csock;
int j;
@@ -463,7 +463,7 @@ static void acceptconnection(void)
}
/* handle the connection */
- handleconnection(csock);
+ handleconnection(csock,session);
}
@@ -509,16 +509,18 @@ static void install_sighandler(int signum,RETSIGTYPE (*handler) (int))
static void *worker(void UNUSED(*arg))
{
+ MYLDAP_SESSION *session;
+ /* create a new LDAP session */
+ session=myldap_create_session();
/* start waiting for incoming connections */
while (nslcd_exitsignal==0)
{
/* wait for a new connection */
- acceptconnection();
+ acceptconnection(session);
}
return NULL;
}
-
/* the main program... */
int main(int argc,char *argv[])
{
@@ -543,7 +545,7 @@ int main(int argc,char *argv[])
/* read configuration file */
cfg_init();
- nslcd_cfg->ldc_debug=nslcd_debugging;
+ nslcd_cfg->ldc_debug=nslcd_debugging?nslcd_debugging-1:0;
/* daemonize */
if ((!nslcd_debugging)&&(daemon(0,0)<0))
@@ -556,7 +558,7 @@ int main(int argc,char *argv[])
(void)umask((mode_t)0022);
/* intilialize logging */
- if (!nslcd_cfg->ldc_debug)
+ if (!nslcd_debugging)
log_startlogging();
log_log(LOG_INFO,"version %s starting",VERSION);