Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nslcd-common.h8
-rw-r--r--nslcd/alias.c9
-rw-r--r--nslcd/ether.c6
-rw-r--r--nslcd/group.c9
-rw-r--r--nslcd/ldap-nss.c11
-rw-r--r--nslcd/ldap-nss.h22
-rw-r--r--nslcd/ldap-schema.c10
-rw-r--r--nslcd/ldap-schema.h4
-rw-r--r--nslcd/log.c4
-rw-r--r--nslcd/nslcd.c139
-rw-r--r--nslcd/passwd.c5
-rw-r--r--nslcd/protocol.c2
-rw-r--r--nslcd/rpc.c2
-rw-r--r--nslcd/shadow.c2
-rw-r--r--nslcd/util.c15
-rw-r--r--nslcd/util.h6
-rw-r--r--nss/common.c8
-rw-r--r--nss/common.h25
-rw-r--r--nss/group.c6
-rw-r--r--nss/hosts.c13
-rw-r--r--nss/netgroup.c2
-rw-r--r--nss/networks.c8
-rw-r--r--nss/prototypes.h4
-rw-r--r--nss/services.c2
24 files changed, 168 insertions, 154 deletions
diff --git a/nslcd-common.h b/nslcd-common.h
index 5d0f763..56a1093 100644
--- a/nslcd-common.h
+++ b/nslcd-common.h
@@ -65,7 +65,7 @@ static void debug_dump(const void *ptr,size_t size)
#define WRITE(fp,ptr,size) \
DEBUG_PRINT("WRITE : var="__STRING(ptr)" size=%d",(int)size); \
DEBUG_DUMP(ptr,size); \
- if (fwrite(ptr,size,1,fp)<1) \
+ if (fwrite(ptr,(size_t)size,(size_t)1,fp)<(size_t)1) \
{ \
DEBUG_PRINT("WRITE : var="__STRING(ptr)" error: %s",strerror(errno)); \
ERROR_OUT_WRITEERROR(fp); \
@@ -133,7 +133,7 @@ static void debug_dump(const void *ptr,size_t size)
*/
#define READ(fp,ptr,size) \
- if (fread(ptr,size,1,fp)<1) \
+ if (fread(ptr,(size_t)size,(size_t)1,fp)<(size_t)1) \
{ \
DEBUG_PRINT("READ : var="__STRING(ptr)" error: %s",strerror(errno)); \
ERROR_OUT_READERROR(fp); \
@@ -189,11 +189,11 @@ static void debug_dump(const void *ptr,size_t size)
/* align to the specified type width */ \
BUF_ALIGN(fp,type); \
/* check that we have enough room */ \
- BUF_CHECK(fp,(num)*sizeof(type)); \
+ BUF_CHECK(fp,(size_t)(num)*sizeof(type)); \
/* store the pointer */ \
(ptr)=(type *)BUF_CUR; \
/* reserve the space */ \
- BUF_SKIP((num)*sizeof(type));
+ BUF_SKIP((size_t)(num)*sizeof(type));
/* read string in the buffer (using buffer, buflen and bufptr)
and store the actual location of the string in field */
diff --git a/nslcd/alias.c b/nslcd/alias.c
index d7b7f1c..adcef4d 100644
--- a/nslcd/alias.c
+++ b/nslcd/alias.c
@@ -44,10 +44,13 @@
#include "log.h"
static enum nss_status _nss_ldap_parse_alias(
- LDAPMessage *e,struct ldap_state *pvt,void *result,
+ LDAPMessage *e,struct ldap_state UNUSED(*pvt),void *result,
char *buffer,size_t buflen)
{
-
+ /* FIXME: fix following problem:
+ if the entry has multiple cn fields we may end up
+ sending the wrong cn, we should return the requested
+ CN instead, otherwise write an entry for each cn */
struct aliasent *alias=(struct aliasent *)result;
enum nss_status stat;
@@ -60,7 +63,7 @@ static enum nss_status _nss_ldap_parse_alias(
return stat;
}
-static int write_alias(LDAPMessage *e,struct ldap_state *pvt,FILE *fp)
+static int write_alias(LDAPMessage *e,struct ldap_state UNUSED(*pvt),FILE *fp)
{
int stat;
if ((stat=_nss_ldap_write_rndvalue(fp,e,ATM(LM_ALIASES,cn)))!=NSLCD_RESULT_SUCCESS)
diff --git a/nslcd/ether.c b/nslcd/ether.c
index de8f7bc..249b426 100644
--- a/nslcd/ether.c
+++ b/nslcd/ether.c
@@ -75,6 +75,10 @@ struct ether
#ifdef NEW
static int write_ether(LDAPMessage *e,struct ldap_state *pvt,FILE *fp)
{
+ /* FIXME: fix following problem:
+ if the entry has multiple cn fields we may end up
+ sending the wrong cn, we should return the requested
+ CN instead, otherwise write an entry for each cn */
int stat;
char buffer[1024];
/* write NSLCD_STRING(ETHER_NAME) */
@@ -95,7 +99,7 @@ static int write_ether(LDAPMessage *e,struct ldap_state *pvt,FILE *fp)
static enum nss_status
_nss_ldap_parse_ether (LDAPMessage * e,
- struct ldap_state * pvt,
+ struct ldap_state UNUSED(*pvt),
void *result, char *buffer, size_t buflen)
{
struct ether *ether = (struct ether *) result;
diff --git a/nslcd/group.c b/nslcd/group.c
index 5753932..56ada1a 100644
--- a/nslcd/group.c
+++ b/nslcd/group.c
@@ -50,6 +50,11 @@
#include "log.h"
#include "cfg.h"
+/* FIXME: fix following problem:
+ if the entry has multiple cn fields we may end up
+ sending the wrong cn, we should return the requested
+ cn instead, otherwise write an entry for each cn */
+
struct name_list
{
char *name;
@@ -1175,7 +1180,7 @@ int nslcd_group_byname(FILE *fp)
if (1024<LDAP_NSS_BUFLEN_GROUP)
{
log_log(LOG_CRIT,"allocated buffer in nslcd_group_byname() too small");
- exit(1);
+ exit(EXIT_FAILURE);
}
/* do the LDAP request */
LA_INIT(a);
@@ -1213,7 +1218,7 @@ int nslcd_group_bygid(FILE *fp)
if (1024<LDAP_NSS_BUFLEN_GROUP)
{
log_log(LOG_CRIT,"allocated buffer in nslcd_group_byname() too small");
- exit(1);
+ exit(EXIT_FAILURE);
}
/* do the LDAP request */
LA_INIT(a);
diff --git a/nslcd/ldap-nss.c b/nslcd/ldap-nss.c
index f423d75..46ed56a 100644
--- a/nslcd/ldap-nss.c
+++ b/nslcd/ldap-nss.c
@@ -118,8 +118,8 @@ static int __sigaction_retval = -1;
static void (*__sigpipe_handler) (int) = SIG_DFL;
#endif /* HAVE_SIGACTION */
-static const char *_nss_ldap_map_ov (const char *pChar);
-static const char *_nss_ldap_map_df (const char *pChar);
+static const char *_nss_ldap_map_ov (const char *attribute);
+static const char *_nss_ldap_map_df (const char *attribute);
static const char *_nss_ldap_locate_userpassword (char **vals);
/*
@@ -3032,6 +3032,11 @@ _nss_ldap_shadow_handle_flag (struct spwd *sp)
}
#endif /* HAVE_SHADOW_H */
+static enum nss_status
+_nss_ldap_map_get (enum ldap_map_selector sel,
+ enum ldap_map_type type,
+ const char *from, const char **to);
+
const char *
_nss_ldap_map_at (enum ldap_map_selector sel, const char *attribute)
{
@@ -3096,7 +3101,7 @@ _nss_ldap_map_df (const char *attribute)
return value;
}
-enum nss_status
+static enum nss_status
_nss_ldap_map_get (enum ldap_map_selector sel,
enum ldap_map_type type,
const char *from, const char **to)
diff --git a/nslcd/ldap-nss.h b/nslcd/ldap-nss.h
index 3907d08..18c394c 100644
--- a/nslcd/ldap-nss.h
+++ b/nslcd/ldap-nss.h
@@ -331,21 +331,21 @@ enum nss_status _nss_ldap_search_s (const struct ldap_args * args, /* IN */
enum ldap_map_selector sel, /* IN */
const char **user_attrs, /* IN */
int sizelimit, /* IN */
- LDAPMessage ** pRes /* OUT */ );
+ LDAPMessage ** res /* OUT */ );
/*
* Emulate X.500 read operation.
*/
enum nss_status _nss_ldap_read (const char *dn, /* IN */
const char **attributes, /* IN */
- LDAPMessage ** pRes /* OUT */ );
+ LDAPMessage ** res /* OUT */ );
/*
* extended enumeration routine; uses asynchronous API.
* Caller must have acquired the global mutex
*/
enum nss_status _nss_ldap_getent_ex (struct ldap_args * args, /* IN */
- struct ent_context ** key, /* IN/OUT */
+ struct ent_context ** ctx, /* IN/OUT */
void *result, /* IN/OUT */
char *buffer, /* IN */
size_t buflen, /* IN */
@@ -359,7 +359,7 @@ enum nss_status _nss_ldap_getent_ex (struct ldap_args * args, /* IN */
* common enumeration routine; uses asynchronous API.
* Acquires the global mutex
*/
-enum nss_status _nss_ldap_getent (struct ent_context ** key, /* IN/OUT */
+enum nss_status _nss_ldap_getent (struct ent_context ** ctx, /* IN/OUT */
void *result, /* IN/OUT */
char *buffer, /* IN */
size_t buflen, /* IN */
@@ -386,8 +386,8 @@ enum nss_status _nss_ldap_assign_attrvals (LDAPMessage * e, /* IN */
const char *attr, /* IN */
const char *omitvalue, /* IN */
char ***valptr, /* OUT */
- char **buffer, /* IN/OUT */
- size_t * buflen, /* IN/OUT */
+ char **pbuffer, /* IN/OUT */
+ size_t * pbuflen, /* IN/OUT */
size_t * pvalcount /* OUT */ );
@@ -411,15 +411,11 @@ int has_objectclass(LDAPMessage *entry,const char *objectclass);
int _nss_ldap_shadow_date(const char *val);
void _nss_ldap_shadow_handle_flag(struct spwd *sp);
-enum nss_status _nss_ldap_map_get(enum ldap_map_selector sel,
- enum ldap_map_type map,
- const char *key, const char **value);
-
-const char *_nss_ldap_map_at (enum ldap_map_selector sel, const char *pChar2);
+const char *_nss_ldap_map_at (enum ldap_map_selector sel, const char *attribute);
const char *_nss_ldap_unmap_at (enum ldap_map_selector sel, const char *attribute);
-const char *_nss_ldap_map_oc (enum ldap_map_selector sel, const char *pChar);
-const char *_nss_ldap_unmap_oc (enum ldap_map_selector sel, const char *pChar);
+const char *_nss_ldap_map_oc (enum ldap_map_selector sel, const char *objectclass);
+const char *_nss_ldap_unmap_oc (enum ldap_map_selector sel, const char *objectclass);
enum nss_status _nss_ldap_init (void);
diff --git a/nslcd/ldap-schema.c b/nslcd/ldap-schema.c
index ebdc8a2..b335abe 100644
--- a/nslcd/ldap-schema.c
+++ b/nslcd/ldap-schema.c
@@ -57,9 +57,6 @@
char _nss_ldap_filt_getaliasbyname[LDAP_FILT_MAXSIZ];
char _nss_ldap_filt_getaliasent[LDAP_FILT_MAXSIZ];
-/* boot parameters */
-char _nss_ldap_filt_getbootparamsbyname[LDAP_FILT_MAXSIZ];
-
/* MAC address mappings */
char _nss_ldap_filt_gethostton[LDAP_FILT_MAXSIZ];
char _nss_ldap_filt_getntohost[LDAP_FILT_MAXSIZ];
@@ -127,11 +124,6 @@ _nss_ldap_init_filters ()
snprintf (_nss_ldap_filt_getaliasent, LDAP_FILT_MAXSIZ,
"(%s=%s)", AT (objectClass), OC (nisMailAlias));
- /* boot parameters */
- snprintf (_nss_ldap_filt_getbootparamsbyname, LDAP_FILT_MAXSIZ,
- "(&(%s=%s)(%s=%s))", AT (objectClass), OC (bootableDevice),
- ATM (LM_BOOTPARAMS, cn), "%d");
-
/* MAC address mappings */
snprintf (_nss_ldap_filt_gethostton, LDAP_FILT_MAXSIZ,
"(&(%s=%s)(%s=%s))", AT (objectClass), OC (ieee802Device),
@@ -242,8 +234,6 @@ _nss_ldap_init_filters ()
snprintf (_nss_ldap_filt_getnetgrent, LDAP_FILT_MAXSIZ,
"(&(%s=%s)(%s=%s))", AT (objectClass), OC (nisNetgroup),
ATM (LM_NETGROUP, cn), "%s");
- snprintf (_nss_ldap_filt_innetgr, LDAP_FILT_MAXSIZ,
- "(&(%s=%s)(%s=%s))", AT (objectClass), OC (nisNetgroup), AT (memberNisNetgroup), "%s");
}
diff --git a/nslcd/ldap-schema.h b/nslcd/ldap-schema.h
index 7d19874..4ccbcd2 100644
--- a/nslcd/ldap-schema.h
+++ b/nslcd/ldap-schema.h
@@ -40,9 +40,6 @@ void _nss_ldap_init_attributes(const char ***attrtab);
extern char _nss_ldap_filt_getaliasbyname[];
extern char _nss_ldap_filt_getaliasent[];
-/* boot parameters */
-extern char _nss_ldap_filt_getbootparamsbyname[];
-
/* MAC address mappings */
extern char _nss_ldap_filt_gethostton[];
extern char _nss_ldap_filt_getntohost[];
@@ -95,7 +92,6 @@ extern char _nss_ldap_filt_getspent[];
/* netgroups */
extern char _nss_ldap_filt_getnetgrent[];
-extern char _nss_ldap_filt_innetgr[];
/**
* Initialize attribute vector table indexed by map
diff --git a/nslcd/log.c b/nslcd/log.c
index d5f89de..888c53f 100644
--- a/nslcd/log.c
+++ b/nslcd/log.c
@@ -68,7 +68,7 @@ static void log_addlogging_fp(FILE *fp,int loglevel)
{
fprintf(stderr,"malloc() failed: %s",strerror(errno));
/* since this is done during initialisation it's best to bail out */
- exit(1);
+ exit(EXIT_FAILURE);
}
tmp->fp=fp;
tmp->loglevel=loglevel;
@@ -92,7 +92,7 @@ void log_addlogging_file(const char *filename,int loglevel)
if (fp==NULL)
{
log_log(LOG_ERR,"cannot open logfile (%s) for appending: %s",filename,strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
log_addlogging_fp(fp,loglevel);
}
diff --git a/nslcd/nslcd.c b/nslcd/nslcd.c
index 4d54b48..997a236 100644
--- a/nslcd/nslcd.c
+++ b/nslcd/nslcd.c
@@ -70,7 +70,7 @@ static int nslcd_serversocket=-1;
/* thread ids of all running threads */
#define NUM_THREADS 5
-pthread_t nslcd_threads[NUM_THREADS];
+static pthread_t nslcd_threads[NUM_THREADS];
/* display version information */
@@ -122,16 +122,16 @@ static void parse_cmdline(int argc,char *argv[])
break;
case 'h': /* --help display this help and exit */
display_usage(stdout,argv[0]);
- exit(0);
+ exit(EXIT_SUCCESS);
case 'V': /* --version output version information and exit */
display_version(stdout);
- exit(0);
+ exit(EXIT_SUCCESS);
case ':': /* missing required parameter */
case '?': /* unknown option character or extraneous parameter */
default:
fprintf(stderr,"Try `%s --help' for more information.\n",
argv[0]);
- exit(1);
+ exit(EXIT_FAILURE);
}
}
/* check for remaining arguments */
@@ -141,7 +141,7 @@ static void parse_cmdline(int argc,char *argv[])
argv[0],argv[optind]);
fprintf(stderr,"Try `%s --help' for more information.\n",
argv[0]);
- exit(1);
+ exit(EXIT_FAILURE);
}
}
@@ -209,8 +209,10 @@ static RETSIGTYPE sigexit_handler(int signum)
nslcd_exitsignal=signum;
/* cancel all running threads */
for (i=0;i<NUM_THREADS;i++)
- pthread_cancel(nslcd_threads[i]);
-
+ if (pthread_cancel(nslcd_threads[i]))
+ {
+ log_log(LOG_WARNING,"failed to stop thread %d (ignored): %s",i,strerror(errno));
+ }
}
@@ -251,7 +253,7 @@ static int open_socket(void)
if ( (sock=socket(PF_UNIX,SOCK_STREAM,0))<0 )
{
log_log(LOG_ERR,"cannot create socket: %s",strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
/* remove existing named socket */
@@ -273,7 +275,7 @@ static int open_socket(void)
strerror(errno));
if (close(sock))
log_log(LOG_WARNING,"problem closing socket: %s",strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
/* close the file descriptor on exit */
@@ -282,16 +284,16 @@ static int open_socket(void)
log_log(LOG_ERR,"fctnl(F_SETFL,O_NONBLOCK) failed: %s",strerror(errno));
if (close(sock))
log_log(LOG_WARNING,"problem closing socket: %s",strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
/* set permissions of socket so anybody can do requests */
- if (fchmod(sock,0666))
+ if (fchmod(sock,(mode_t)0666))
{
log_log(LOG_ERR,"fctnl(F_SETFL,O_NONBLOCK) failed: %s",strerror(errno));
if (close(sock))
log_log(LOG_WARNING,"problem closing socket: %s",strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
/* start listening for connections */
@@ -300,7 +302,7 @@ static int open_socket(void)
log_log(LOG_ERR,"listen() failed: %s",strerror(errno));
if (close(sock))
log_log(LOG_WARNING,"problem closing socket: %s",strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
/* we're done */
@@ -314,7 +316,7 @@ static int read_header(FILE *fp,int32_t *action)
int32_t tmpint32;
/* read the protocol version */
READ_TYPE(fp,tmpint32,int32_t);
- if (tmpint32 != NSLCD_VERSION)
+ if (tmpint32 != (int32_t)NSLCD_VERSION)
{
log_log(LOG_DEBUG,"wrong nslcd version id (%d)",(int)tmpint32);
return -1;
@@ -333,8 +335,13 @@ static void handleconnection(int sock)
struct ucred client;
int32_t action;
+ /* initialize client information (in case getsockopt() breaks) */
+ client.pid=(pid_t)0;
+ client.uid=(uid_t)-1;
+ client.gid=(gid_t)-1;
+
/* look up process information from client */
- alen=sizeof(struct ucred);
+ alen=(socklen_t)sizeof(struct ucred);
if (getsockopt(sock,SOL_SOCKET,SO_PEERCRED,&client,&alen) < 0)
{
log_log(LOG_ERR,"getsockopt(SO_PEERCRED) failed: %s",strerror(errno));
@@ -351,57 +358,57 @@ static void handleconnection(int sock)
if ((fp=fdopen(sock,"w+"))==NULL)
{
log_log(LOG_WARNING,"cannot create stream for writing: %s",strerror(errno));
- close(sock);
+ (void)close(sock);
return;
}
/* read request */
if (read_header(fp,&action))
{
- fclose(fp);
+ (void)fclose(fp);
return;
}
/* handle request */
switch (action)
{
- case NSLCD_ACTION_ALIAS_BYNAME: nslcd_alias_byname(fp); break;
- case NSLCD_ACTION_ALIAS_ALL: nslcd_alias_all(fp); break;
- case NSLCD_ACTION_ETHER_BYNAME: nslcd_ether_byname(fp); break;
- case NSLCD_ACTION_ETHER_BYETHER: nslcd_ether_byether(fp); break;
- case NSLCD_ACTION_ETHER_ALL: nslcd_ether_all(fp); break;
- case NSLCD_ACTION_GROUP_BYNAME: nslcd_group_byname(fp); break;
- case NSLCD_ACTION_GROUP_BYGID: nslcd_group_bygid(fp); break;
- case NSLCD_ACTION_GROUP_BYMEMBER: nslcd_group_bymember(fp); break;
- case NSLCD_ACTION_GROUP_ALL: nslcd_group_all(fp); break;
- case NSLCD_ACTION_HOST_BYNAME: nslcd_host_byname(fp); break;
- case NSLCD_ACTION_HOST_BYADDR: nslcd_host_byaddr(fp); break;
- case NSLCD_ACTION_HOST_ALL: nslcd_host_all(fp); break;
- case NSLCD_ACTION_NETGROUP_BYNAME: nslcd_netgroup_byname(fp); break;
- case NSLCD_ACTION_NETWORK_BYNAME: nslcd_network_byname(fp); break;
- case NSLCD_ACTION_NETWORK_BYADDR: nslcd_network_byaddr(fp); break;
- case NSLCD_ACTION_NETWORK_ALL: nslcd_network_all(fp); break;
- case NSLCD_ACTION_PASSWD_BYNAME: nslcd_passwd_byname(fp); break;
- case NSLCD_ACTION_PASSWD_BYUID: nslcd_passwd_byuid(fp); break;
- case NSLCD_ACTION_PASSWD_ALL: nslcd_passwd_all(fp); break;
- case NSLCD_ACTION_PROTOCOL_BYNAME: nslcd_protocol_byname(fp); break;
- case NSLCD_ACTION_PROTOCOL_BYNUMBER:nslcd_protocol_bynumber(fp); break;
- case NSLCD_ACTION_PROTOCOL_ALL: nslcd_protocol_all(fp); break;
- case NSLCD_ACTION_RPC_BYNAME: nslcd_rpc_byname(fp); break;
- case NSLCD_ACTION_RPC_BYNUMBER: nslcd_rpc_bynumber(fp); break;
- case NSLCD_ACTION_RPC_ALL: nslcd_rpc_all(fp); break;
- case NSLCD_ACTION_SERVICE_BYNAME: nslcd_service_byname(fp); break;
- case NSLCD_ACTION_SERVICE_BYNUMBER: nslcd_service_bynumber(fp); break;
- case NSLCD_ACTION_SERVICE_ALL: nslcd_service_all(fp); break;
- case NSLCD_ACTION_SHADOW_BYNAME: nslcd_shadow_byname(fp); break;
- case NSLCD_ACTION_SHADOW_ALL: nslcd_shadow_all(fp); break;
+ 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;
default:
log_log(LOG_WARNING,"invalid request id: %d",(int)action);
break;
}
/* we're done with the request */
- fclose(fp);
+ (void)fclose(fp);
return;
}
@@ -457,17 +464,17 @@ static void write_pidfile(const char *filename)
if ((fp=fopen(filename,"w"))==NULL)
{
log_log(LOG_ERR,"cannot open pid file (%s): %s",filename,strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
if (fprintf(fp,"%d\n",(int)getpid())<=0)
{
log_log(LOG_ERR,"error writing pid file (%s)",filename);
- exit(1);
+ exit(EXIT_FAILURE);
}
if (fclose(fp))
{
log_log(LOG_ERR,"error writing pid file (%s): %s",filename,strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
}
}
@@ -484,7 +491,7 @@ static void install_sighandler(int signum,RETSIGTYPE (*handler) (int))
if (sigaction(signum,&act,NULL)!=0)
{
log_log(LOG_ERR,"error installing signal handler for '%s': %s",signame(signum),strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
}
@@ -503,8 +510,8 @@ static void *worker(void UNUSED(*arg))
/* the main program... */
int main(int argc,char *argv[])
{
- gid_t mygid=-1;
- uid_t myuid=-1;
+ gid_t mygid=(gid_t)-1;
+ uid_t myuid=(uid_t)-1;
int i;
/* parse the command line */
@@ -526,11 +533,11 @@ int main(int argc,char *argv[])
if ((!nslcd_debugging)&&(daemon(0,0)<0))
{
log_log(LOG_ERR,"unable to daemonize: %s",strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
/* set default mode for pidfile and socket */
- umask(0022);
+ (void)umask((mode_t)0022);
/* intilialize logging */
if (!nslcd_debugging)
@@ -538,7 +545,11 @@ int main(int argc,char *argv[])
log_log(LOG_INFO,"version %s starting",VERSION);
/* install handler to close stuff off on exit and log notice */
- atexit(exithandler);
+ if (atexit(exithandler))
+ {
+ log_log(LOG_ERR,"atexit() failed: %s",strerror(errno));
+ exit(EXIT_FAILURE);
+ }
/* write pidfile */
write_pidfile(NSLCD_PIDFILE);
@@ -566,7 +577,7 @@ int main(int argc,char *argv[])
if (prctl(PR_SET_KEEPCAPS,1))
{
log_log(LOG_ERR,"cannot prctl(PR_SET_KEEPCAPS,1): %s",strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
log_log(LOG_DEBUG,"debug: prctl(PR_SET_KEEPCAPS,1) done");
/* dump the current capabilities */
@@ -581,7 +592,7 @@ int main(int argc,char *argv[])
if (setgid(mygid)!=0)
{
log_log(LOG_ERR,"cannot setgid(%d): %s",(int)mygid,strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
log_log(LOG_DEBUG,"debug: setgid(%d) done",mygid);
}
@@ -592,7 +603,7 @@ int main(int argc,char *argv[])
if (setuid(myuid)!=0)
{
log_log(LOG_ERR,"cannot setuid(%d): %s",(int)myuid,strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
log_log(LOG_DEBUG,"debug: setuid(%d) done",myuid);
}
@@ -602,7 +613,7 @@ int main(int argc,char *argv[])
if (cap_set_proc(mycapabilities)!=0)
{
log_log(LOG_ERR,"cannot cap_set_proc(%s): %s",cap_to_text(mycapabilities,NULL),strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
log_log(LOG_DEBUG,"debug: cap_set_proc(%2) done",cap_to_text(mycapabilities,NULL));
/* we no longer need this so we should free it */
@@ -632,7 +643,7 @@ int main(int argc,char *argv[])
if (pthread_create(&nslcd_threads[i],NULL,worker,NULL))
{
log_log(LOG_ERR,"unable to start worker thread %d: %s",i,strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
}
@@ -642,7 +653,7 @@ int main(int argc,char *argv[])
if (pthread_join(nslcd_threads[i],NULL))
{
log_log(LOG_ERR,"unable to wait for worker thread %d: %s",i,strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
}
@@ -653,5 +664,5 @@ int main(int argc,char *argv[])
signame(nslcd_exitsignal),nslcd_exitsignal);
}
- return 1;
+ return EXIT_FAILURE;
}
diff --git a/nslcd/passwd.c b/nslcd/passwd.c
index 02c0d6d..e80a691 100644
--- a/nslcd/passwd.c
+++ b/nslcd/passwd.c
@@ -78,6 +78,11 @@ static enum nss_status _nss_ldap_parse_pw (LDAPMessage * e,
struct ldap_state * pvt,
void *result, char *buffer, size_t buflen)
{
+ /* FIXME: fix following problem:
+ if the entry has multiple uid fields we may end up
+ sending the wrong uid, we should return the requested
+ uid instead, otherwise write an entry for each uid
+ (maybe also for uidNumber) */
struct passwd *pw = (struct passwd *) result;
char *uid, *gid;
enum nss_status stat;
diff --git a/nslcd/protocol.c b/nslcd/protocol.c
index 30e42d4..c2a14cf 100644
--- a/nslcd/protocol.c
+++ b/nslcd/protocol.c
@@ -54,7 +54,7 @@
#include "log.h"
static enum nss_status _nss_ldap_parse_proto (LDAPMessage *e,
- struct ldap_state *pvt,
+ struct ldap_state UNUSED(*pvt),
void *result, char *buffer, size_t buflen)
{
diff --git a/nslcd/rpc.c b/nslcd/rpc.c
index edb54d9..6ce4198 100644
--- a/nslcd/rpc.c
+++ b/nslcd/rpc.c
@@ -74,7 +74,7 @@ static int write_rpcent(FILE *fp,struct rpcent *result)
}
static enum nss_status _nss_ldap_parse_rpc (LDAPMessage * e,
- struct ldap_state * pvt,
+ struct ldap_state UNUSED(*pvt),
void *result, char *buffer, size_t buflen)
{
diff --git a/nslcd/shadow.c b/nslcd/shadow.c
index e2473af..86514c2 100644
--- a/nslcd/shadow.c
+++ b/nslcd/shadow.c
@@ -50,7 +50,7 @@
#include "log.h"
static enum nss_status _nss_ldap_parse_sp(LDAPMessage *e,
- struct ldap_state *pvt,
+ struct ldap_state UNUSED(*pvt),
void *result,char *buffer,size_t buflen)
{
struct spwd *sp = (struct spwd *) result;
diff --git a/nslcd/util.c b/nslcd/util.c
index 68ee0b1..0f4d7dd 100644
--- a/nslcd/util.c
+++ b/nslcd/util.c
@@ -109,7 +109,7 @@ do_find_last (struct ldap_dictionary *dict)
}
static enum nss_status
-do_dup_datum (unsigned flags, struct ldap_datum * dst, const struct ldap_datum * src)
+do_dup_datum (struct ldap_datum * dst, const struct ldap_datum * src)
{
dst->data = malloc (src->size);
if (dst->data == NULL)
@@ -142,7 +142,6 @@ do_free_dictionary (struct ldap_dictionary *dict)
static enum nss_status old_dict_put(
struct ldap_dictionary *db,
- unsigned flags,
const struct ldap_datum *key,
const struct ldap_datum *value)
{
@@ -168,13 +167,13 @@ static enum nss_status old_dict_put(
return NSS_STATUS_TRYAGAIN;
}
- if (do_dup_datum(flags,&q->key,key)!=NSS_STATUS_SUCCESS)
+ if (do_dup_datum(&q->key,key)!=NSS_STATUS_SUCCESS)
{
do_free_dictionary(q);
return NSS_STATUS_TRYAGAIN;
}
- if (do_dup_datum(flags,&q->value,value)!=NSS_STATUS_SUCCESS)
+ if (do_dup_datum(&q->value,value)!=NSS_STATUS_SUCCESS)
{
do_free_dictionary(q);
return NSS_STATUS_TRYAGAIN;
@@ -235,7 +234,7 @@ dn2uid_cache_put (const char *dn, const char *uid)
val.data = (void *) uid;
val.size = strlen (uid);
- status = old_dict_put (__cache, 0, &key, &val);
+ status = old_dict_put (__cache, &key, &val);
cache_unlock ();
@@ -282,9 +281,9 @@ dn2uid_cache_get (const char *dn, char **uid, char **buffer, size_t * buflen)
return NSS_STATUS_SUCCESS;
}
-enum nss_status
-_nss_ldap_dn2uid (const char *dn, char **uid, char **buffer, size_t * buflen,
- int *pIsNestedGroup, LDAPMessage ** pRes)
+enum nss_status _nss_ldap_dn2uid(const char *dn,char **uid,char **buffer,
+ size_t * buflen,int *pIsNestedGroup,
+ LDAPMessage **pRes)
{
enum nss_status status;
diff --git a/nslcd/util.h b/nslcd/util.h
index 18cf06a..f329daf 100644
--- a/nslcd/util.h
+++ b/nslcd/util.h
@@ -32,7 +32,7 @@
*/
enum nss_status _nss_ldap_getrdnvalue(LDAPMessage *entry,
const char *rdntype,
- char **rval, char **buf, size_t * len);
+ char **rval, char **buffer, size_t * buflen);
int _nss_ldap_write_rndvalue(FILE *fp,LDAPMessage *entry,const char *rdntype);
@@ -40,13 +40,13 @@ int _nss_ldap_write_rndvalue(FILE *fp,LDAPMessage *entry,const char *rdntype);
* map a distinguished name to a login name, or group entry
*/
enum nss_status _nss_ldap_dn2uid (const char *dn,
- char **uid, char **buf, size_t * len,
+ char **uid, char **buffer, size_t * buflen,
int *pIsNestedGroup, LDAPMessage ** pRes);
/*
* Escape '*' in a string for use as a filter
*/
-int _nss_ldap_escape_string(const char *str,char *buf,size_t buflen);
+int _nss_ldap_escape_string(const char *src,char *buffer,size_t buflen);
#endif /* _LDAP_NSS_LDAP_UTIL_H */
diff --git a/nss/common.c b/nss/common.c
index da4c68f..29e06f2 100644
--- a/nss/common.c
+++ b/nss/common.c
@@ -37,7 +37,7 @@
/* translates a nsklcd return code (as defined in nslcd.h) to
a nss code (as defined in nss.h) */
-enum nss_status nslcd2nss(int code)
+enum nss_status nslcd2nss(int32_t code)
{
switch (code)
{
@@ -62,15 +62,15 @@ FILE *nslcd_client_open()
addr.sun_family=AF_UNIX;
strcpy(addr.sun_path,NSLCD_SOCKET);
/* connect to the socket */
- if (connect(sock,(struct sockaddr *)&addr,sizeof(struct sockaddr_un))<0)
+ if (connect(sock,(struct sockaddr *)&addr,(socklen_t)sizeof(struct sockaddr_un))<0)
{
- close(sock);
+ (void)close(sock);
return NULL;
}
/* create a stream object */
if ((fp=fdopen(sock,"w+"))==NULL)
{
- close(sock);
+ (void)close(sock);
return NULL;
}
/* return the stream */
diff --git a/nss/common.h b/nss/common.h
index 723d203..03c60b4 100644
--- a/nss/common.h
+++ b/nss/common.h
@@ -32,8 +32,7 @@
/* This function maps an nslcd return code (as defined in nslcd.h)
to an nss code (as defined in nss.h). */
-enum nss_status nslcd2nss(int code)
- PURE MUST_USE;
+enum nss_status nslcd2nss(int32_t code);
/* returns a socket to the server or NULL on error (see errno),
socket should be closed with fclose() */
@@ -51,24 +50,24 @@ FILE *nslcd_client_open(void)
/* Write a request header with a request code. */
#define WRITE_REQUEST(fp,req) \
- WRITE_INT32(fp,NSLCD_VERSION) \
- WRITE_INT32(fp,req)
+ WRITE_INT32(fp,(int32_t)NSLCD_VERSION) \
+ WRITE_INT32(fp,(int32_t)req)
/* Read a response header and check that the returned request
code equals the expected code. */
#define READ_RESPONSEHEADER(fp,req) \
READ_TYPE(fp,tmpint32,int32_t); \
- if (tmpint32!=NSLCD_VERSION) \
+ if (tmpint32!=(int32_t)NSLCD_VERSION) \
{ ERROR_OUT_READERROR(fp) } \
READ_TYPE(fp,tmpint32,int32_t); \
- if (tmpint32!=(req)) \
+ if (tmpint32!=(int32_t)(req)) \
{ ERROR_OUT_READERROR(fp) }
/* Read the response code (the result code of the query) from
the stream. */
#define READ_RESPONSE_CODE(fp) \
READ_TYPE(fp,tmpint32,int32_t); \
- if (tmpint32!=NSLCD_RESULT_SUCCESS) \
+ if (tmpint32!=(int32_t)NSLCD_RESULT_SUCCESS) \
{ ERROR_OUT_NOSUCCESS(fp,tmpint32) }
/* These are macros for handling read and write problems, they are
@@ -83,7 +82,7 @@ FILE *nslcd_client_open(void)
/* Macro is called to handle errors on fread(). */
#define ERROR_OUT_READERROR(fp) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
*errnop=ENOENT; \
return NSS_STATUS_UNAVAIL;
@@ -94,7 +93,7 @@ FILE *nslcd_client_open(void)
Something more inteligent (e.g. ungetting the read data from
the stream) should be implemented. */
#define ERROR_OUT_BUFERROR(fp) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
*errnop=ERANGE; \
return NSS_STATUS_TRYAGAIN;
@@ -107,7 +106,7 @@ FILE *nslcd_client_open(void)
/* This macro is called if the read status code is not
NSLCD_RESULT_SUCCESS. */
#define ERROR_OUT_NOSUCCESS(fp,retv) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
*errnop=ENOENT; \
return nslcd2nss(retv);
@@ -141,7 +140,7 @@ FILE *nslcd_client_open(void)
retv=readfn; \
/* close socket and we're done */ \
if (retv==NSS_STATUS_SUCCESS) \
- fclose(fp); \
+ (void)fclose(fp); \
return retv;
/* This macro can be used to generate a get..byname() function
@@ -169,7 +168,7 @@ FILE *nslcd_client_open(void)
errnop=&errnocp; \
/* close the existing stream if it is still open */ \
if (fp!=NULL) \
- fclose(fp); \
+ (void)fclose(fp); \
/* open a new stream and write the request */ \
OPEN_SOCK(fp); \
WRITE_REQUEST(fp,action); \
@@ -202,7 +201,7 @@ FILE *nslcd_client_open(void)
#define NSS_ENDENT(fp) \
if (fp!=NULL) \
{ \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
} \
return NSS_STATUS_SUCCESS;
diff --git a/nss/group.c b/nss/group.c
index 4e51f94..ebf09a9 100644
--- a/nss/group.c
+++ b/nss/group.c
@@ -50,12 +50,12 @@ static enum nss_status read_gids(
FILE *fp,long int *start,long int *size,
gid_t **groupsp,long int limit,int *errnop)
{
- int32_t res=NSLCD_RESULT_SUCCESS;
+ int32_t res=(int32_t)NSLCD_RESULT_SUCCESS;
int32_t tmpint32,tmp2int32,tmp3int32;
gid_t gid;
int num=0;
/* loop over results */
- while (res==NSLCD_RESULT_SUCCESS)
+ while (res==(int32_t)NSLCD_RESULT_SUCCESS)
{
/* skip group name */
SKIP_STRING(fp);
@@ -77,7 +77,7 @@ static enum nss_status read_gids(
READ_TYPE(fp,res,int32_t);
}
/* return the proper status code */
- return (res==NSLCD_RESULT_NOTFOUND)?NSS_STATUS_SUCCESS:nslcd2nss(res);
+ return (res==(int32_t)NSLCD_RESULT_NOTFOUND)?NSS_STATUS_SUCCESS:nslcd2nss(res);
}
#endif /* REENABLE_WHEN_WORKING */
diff --git a/nss/hosts.c b/nss/hosts.c
index 2720b54..2eae67d 100644
--- a/nss/hosts.c
+++ b/nss/hosts.c
@@ -40,7 +40,7 @@
#undef ERROR_OUT_READERROR
#define ERROR_OUT_READERROR(fp) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
*errnop=ENOENT; \
*h_errnop=NO_RECOVERY; \
@@ -48,7 +48,7 @@
#undef ERROR_OUT_BUFERROR
#define ERROR_OUT_BUFERROR(fp) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
*errnop=ERANGE; \
*h_errnop=TRY_AGAIN; \
@@ -60,7 +60,7 @@
#undef ERROR_OUT_NOSUCCESS
#define ERROR_OUT_NOSUCCESS(fp,retv) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
*errnop=ENOENT; \
*h_errnop=HOST_NOT_FOUND; \
@@ -75,7 +75,8 @@ static enum nss_status read_hostent(
char *buffer,size_t buflen,int *errnop,int *h_errnop)
{
int32_t tmpint32,tmp2int32,tmp3int32;
- int numaddr,i;
+ int32_t numaddr;
+ int i;
int readaf;
size_t bufptr=0;
/* read the host entry */
@@ -88,7 +89,7 @@ static enum nss_status read_hostent(
/* allocate memory for array */
/* Note: this may allocate too much memory (e.g. also for
address records of other address families) but
- this is an easy way to do it */
+ this is a simple way to do it */
BUF_ALLOC(fp,result->h_addr_list,char *,numaddr+1);
/* go through the address list and filter on af */
i=0;
@@ -134,7 +135,7 @@ static enum nss_status read_hostent_erronempty(
{
*errnop=ENOENT;
*h_errnop=NO_ADDRESS;
- fclose(fp);
+ (void)fclose(fp);
return NSS_STATUS_NOTFOUND;
}
return NSS_STATUS_SUCCESS;
diff --git a/nss/netgroup.c b/nss/netgroup.c
index 3f0a60f..39f77f6 100644
--- a/nss/netgroup.c
+++ b/nss/netgroup.c
@@ -35,7 +35,7 @@
if we have sucessfully read some entries */
#undef ERROR_OUT_NOSUCCESS
#define ERROR_OUT_NOSUCCESS(fp,retv) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
if (result->first) \
{ \
diff --git a/nss/networks.c b/nss/networks.c
index 37653f3..91dfc52 100644
--- a/nss/networks.c
+++ b/nss/networks.c
@@ -40,7 +40,7 @@
#undef ERROR_OUT_READERROR
#define ERROR_OUT_READERROR(fp) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
*errnop=ENOENT; \
*h_errnop=NO_RECOVERY; \
@@ -48,7 +48,7 @@
#undef ERROR_OUT_BUFERROR
#define ERROR_OUT_BUFERROR(fp) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
*errnop=ERANGE; \
*h_errnop=TRY_AGAIN; \
@@ -60,7 +60,7 @@
#undef ERROR_OUT_NOSUCCESS
#define ERROR_OUT_NOSUCCESS(fp,retv) \
- fclose(fp); \
+ (void)fclose(fp); \
fp=NULL; \
*errnop=ENOENT; \
*h_errnop=HOST_NOT_FOUND; \
@@ -94,7 +94,7 @@ static enum nss_status read_netent(
{
/* read address and translate to host byte order */
READ_TYPE(fp,tmpint32,int32_t);
- result->n_net=ntohl(tmpint32);
+ result->n_net=ntohl((uint32_t)tmpint32);
/* signal that we've read a proper entry */
retv=NSS_STATUS_SUCCESS;
/* don't return here to not upset the stream */
diff --git a/nss/prototypes.h b/nss/prototypes.h
index 6cf039e..c41e797 100644
--- a/nss/prototypes.h
+++ b/nss/prototypes.h
@@ -99,8 +99,8 @@ enum nss_status _nss_ldap_getaliasent_r(struct aliasent *result,char *buffer,siz
enum nss_status _nss_ldap_endaliasent(void);
/* ethers - ethernet numbers */
-enum nss_status _nss_ldap_gethostton_r(const char *name,struct etherent *resut,char *buffer,size_t buflen,int *errnop);
-enum nss_status _nss_ldap_getntohost_r(const struct ether_addr *addr,struct etherent *eth,char *buffer,size_t buflen,int *errnop);
+enum nss_status _nss_ldap_gethostton_r(const char *name,struct etherent *result,char *buffer,size_t buflen,int *errnop);
+enum nss_status _nss_ldap_getntohost_r(const struct ether_addr *addr,struct etherent *result,char *buffer,size_t buflen,int *errnop);
enum nss_status _nss_ldap_setetherent(int stayopen);
enum nss_status _nss_ldap_getetherent_r(struct etherent *result,char *buffer,size_t buflen,int *errnop);
enum nss_status _nss_ldap_endetherent(void);
diff --git a/nss/services.c b/nss/services.c
index f79012a..f9ec7c5 100644
--- a/nss/services.c
+++ b/nss/services.c
@@ -40,7 +40,7 @@ static enum nss_status read_servent(
READ_STRINGLIST_NULLTERM(fp,result->s_aliases);
/* store port number in network byte order */
READ_TYPE(fp,tmpint32,int32_t);
- result->s_port=ntohs(tmpint32);
+ result->s_port=ntohs((uint16_t)tmpint32);
READ_STRING_BUF(fp,result->s_proto);
/* we're done */
return NSS_STATUS_SUCCESS;